我正在运行以下查询以获取基于日期的最新记录
select myItem,to_timestamp(my_date/1000)
from history_table
where to_timestamp(sign_date/1000)::date >= '2019-01-01'
and myItem = 'SomeItem'
group by myItem,to_timestamp(my_date/1000)
order by to_timestamp(my_date/1000)
DESC LIMIT 1;
返回如下数据:
myItem | to_timestamp
----------------------+------------------------
SomeItem | 2019-02-20 15:37:57+00
(1 row)
但如果我移除
LIMIT 1
,我会得到: myItem | to_timestamp
----------------------+------------------------
SomeItem | 2019-02-20 15:37:57+00
SomeItem | 2019-02-15 13:47:43+00
SomeItem | 2019-02-08 19:02:57+00
SomeItem | 2019-02-08 12:42:34+00
SomeItem | 2019-02-07 21:07:16+00
SomeItem | 2019-02-07 21:04:26+00
SomeItem | 2019-02-04 22:01:42+00
(7 rows)
问题
我想删除
myItem = 'SomeItem'
子句,以便根据my_date
获取每个项目的最新记录。我该怎么做? 最佳答案
在PostgreSQL中,您可以使用DISTINCT ON
来完成以下操作:
select distinct on (myItem) myItem, to_timestamp(my_date/1000)
from history_table
where to_timestamp(sign_date/1000)::date >= date '2019-01-01'
order by myItem, to_timestamp(my_date/1000) desc;
在检索每个myitem的最新行时,可以向select子句添加更多列。
编辑:如果只是显示MyItIt的最大日期,我会和克里斯蒂安的ANWER一起去。当表中有更多列要显示时,我的解决方案是合适的。
关于sql - 如何按group by子句中的日期获取最新项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55341416/