如何筛选相对于特定日期时间的SQL表?

时间:2019-01-18 20:21:55

标签: mysql sql datetime

我正在尝试编写一条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中带有日期时间对象的一些内置功能。

2 个答案:

答案 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
);