我正在运行以下查询以获取基于日期的最新记录

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/

10-13 08:54