SQL:选择给定日期时间的每一天的最后一条记录

Bar*_*dax 5 mysql sql

我有一个数据表stock(数据库是MySQL):

trade_time          price  
2013-01-02 09:43:00 515.61
2013-01-03 09:39:00 525.90
2013-01-03 11:38:00 539.44
2013-01-03 13:22:00 509.16
2013-01-04 09:47:00 507.40
2013-01-04 14:33:00 517.45
2013-01-07 09:33:00 550.42
2013-01-07 13:13:00 524.85
2013-01-07 14:51:00 536.44
Run Code Online (Sandbox Code Playgroud)

我想返回每天的最后交易价格

trade_date price  
2013-01-02 515.61
2013-01-03 509.16
2013-01-04 517.45
2013-01-07 536.44
Run Code Online (Sandbox Code Playgroud)

该问题与本网站上其他“根据日期时间选择最新记录”问题的不同之处在于,输入为 in,datetime但输出为date。让我知道这个问题已经得到解答。

Tim*_*sen 6

您可以加入一个子查询,该子查询查找每个日期的最大日期时间。

SELECT t1.trade_time, t1.price
FROM yourTable t1
INNER JOIN
(
    SELECT DATE(trade_time) AS trade_date, MAX(trade_time) AS max_trade_time
    FROM yourTable
    GROUP BY DATE(trade_time)
) t2
    ON t2.trade_date = DATE(t1.trade_time) AND
       t2.max_trade_time = t1.trade_time
ORDER BY
    t1.trade_time;
Run Code Online (Sandbox Code Playgroud)

下面的演示的屏幕截图

演示


Gor*_*off 0

您可以使用相关子查询:

select t.*
from t
where t.trade_date = (select max(t2.trade_date)
                      from t t2
                      where date(t2.trade_date) = date(t.trade_date)
                     );
Run Code Online (Sandbox Code Playgroud)