我正在尝试编写一条SQL命令,该命令将从特定日期重新创建报告数据。该表具有三列(位置(varchar),值(int),日期时间(datetime))。随着时间的流逝,行会添加到表中以提供每个位置的更新值。
我应该使用什么SQL: 对于每个位置,仅返回在给定日期时间之前具有最近日期时间的行。
示例:
Location Value Datetime
A 5 2011-01-01
B 6 2011-01-01
A 7 2012-01-01
A 8 2012-06-01
如果我对2012-05-01感到好奇,我想找回第2行和第3行。
我想的是GROUP BY位置,并指定保留小于给定日期时间的最大日期时间。我假设我应该使用SQL中带有日期时间对象的一些内置功能。
答案 0 :(得分:1)
在MySQL 8.x中,您可以使用expires_in
窗口函数。例如:
ROW_NUMBER()
答案 1 :(得分:1)
直接方法:获取每个位置的最大日期,然后选择完整的记录:
select *
from mytable
where (location, datetime) in
(
select location, max(datetime)
from mytable
where datetime < date '2012-05-01'
group by location
);