如何在mySQL中选择近月到期

时间:2018-04-07 14:52:01

标签: mysql

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

第一列中的每个日期都有3个与之关联的到期日期。我想获取最接近日期(近月到期)的到期日期,收盘,到期。 我该怎么做?谢谢。

例如,我希望结果为:

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

4 个答案:

答案 0 :(得分:0)

没有经过测试,我认为在MariaDB中这是有效的。请试试这个:

SELECT
    Date,
    Expiry,
    Close
FROM
    table
GROUP BY
    Date
ORDER BY
    Expiry DESC

答案 1 :(得分:0)

我认为关注,请试试这个:

 SELECT 
     Date, 
     Expiry, 
     Close,
     DATEDIFF(Expiry, Date) DaysToExpire

 FROM
     table
 GROUP BY 
     Date 
 ORDER BY
     DaysToExpire DESC

答案 2 :(得分:0)

我找到了解决方案。为了其他人的利益在这里发布:

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子句是附加的,因为我的表也有很多符号。

它的作用是,它在使用Date分组之前先对Expiry进行排序,然后再次将结果从最旧的日期排序到最新的日期

任何改进的建议都非常受欢迎:)

答案 3 :(得分:0)

您可以尝试类似

的内容
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;