Date Expiry Close
20-Mar-18 28-Mar-18 10143.2
20-Mar-18 26-Apr-18 10180.2
20-Mar-18 31-May-18 10201
21-Mar-18 28-Mar-18 10180.2
21-Mar-18 26-Apr-18 10218.3
21-Mar-18 31-May-18 10237.8
22-Mar-18 28-Mar-18 10127.8
22-Mar-18 26-Apr-18 10168.8
22-Mar-18 31-May-18 10193.2
23-Mar-18 28-Mar-18 10003.9
23-Mar-18 26-Apr-18 10047.6
23-Mar-18 31-May-18 10060.2
26-Mar-18 28-Mar-18 10146.2
26-Mar-18 26-Apr-18 10178.3
26-Mar-18 31-May-18 10205
27-Mar-18 28-Mar-18 10179
27-Mar-18 26-Apr-18 10215.8
27-Mar-18 31-May-18 10235.2
28-Mar-18 28-Mar-18 10120.2
28-Mar-18 26-Apr-18 10152
28-Mar-18 31-May-18 10175.3
2-Apr-18 28-Jun-18 10301.4
2-Apr-18 31-May-18 10288.2
2-Apr-18 26-Apr-18 10264
3-Apr-18 26-Apr-18 10285
3-Apr-18 31-May-18 10313.9
3-Apr-18 28-Jun-18 10327.4
4-Apr-18 26-Apr-18 10146.6
4-Apr-18 31-May-18 10175.5
4-Apr-18 28-Jun-18 10194.7
5-Apr-18 26-Apr-18 10352.2
5-Apr-18 31-May-18 10381
5-Apr-18 28-Jun-18 10398
6-Apr-18 28-Jun-18 10399.3
6-Apr-18 31-May-18 10385.1
6-Apr-18 26-Apr-18 10352.8
Каждая из дат в первом столбце имеет три срока действия, связанные с ним. Я хочу получить Date, Close, Expiry только для истечения срока действия, который ближе всего к дате (истекает месяц истечения срока действия). Как мне это сделать? Спасибо.
Например, я хочу, чтобы результат был следующим:
Date Expiry Close
20-Mar-18 28-Mar-18 10143.2
21-Mar-18 28-Mar-18 10180.2
22-Mar-18 28-Mar-18 10127.8
23-Mar-18 28-Mar-18 10003.9
26-Mar-18 28-Mar-18 10146.2
27-Mar-18 28-Mar-18 10179
28-Mar-18 28-Mar-18 10120.2
2-Apr-18 26-Apr-18 10264
3-Apr-18 26-Apr-18 10285
4-Apr-18 26-Apr-18 10146.6
5-Apr-18 26-Apr-18 10352.2
6-Apr-18 26-Apr-18 10352.8
Я нашел решение. Проводя его здесь для других:
SELECT Date, DATE_FORMAT(min(STR_TO_DATE(Expiry, '%d-%b-%Y' )),"%d-%b-%Y") Expiry, Close
FROM table
WHERE Symbol = 'NIFTY'
GROUP BY Date
order by STR_TO_DATE(DATE, '%d-%b-%Y' )
Предложение WHERE является дополнительным, так как в моей таблице также много символов.
Что он делает, он сортирует Expiry сначала перед группировкой с Date и снова результат сортируется от старейшего до новейшего Date
Любые предложения по улучшению более чем приветствуются :)
Я думаю, что luksch последующий, пожалуйста, попробуйте следующее:
SELECT
Date,
Expiry,
Close,
DATEDIFF(Expiry, Date) DaysToExpire
FROM
table
GROUP BY
Date
ORDER BY
DaysToExpire DESC
Вы можете попробовать что-то вроде
SELECT t.'date' , t.'expiry', t.'close' FROM
test t INNER JOIN (
SELECT 'date', MIN(expiry) AS minD FROM test WHERE 'expiry'>'date' GROUP BY 'date'
) AS minDate
ON t.'date' = minDate.date AND t.'expiry' = minDate.minD;
Не тестировали, я думаю, что в MariaDB это работает. Попробуйте следующее:
SELECT
Date,
Expiry,
Close
FROM
table
GROUP BY
Date
ORDER BY
Expiry DESC