我正在运行以下查询以获取基于日期的最新记录
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
获得每个项目的最新记录。我该怎么办?
答案 0 :(得分:1)
在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子句中添加更多列。
编辑:如果只是要显示每个项目的最大日期,我会选择克里斯蒂安的答案。当您要显示的表中有更多列时,我的解决方案是合适的。
答案 1 :(得分:1)
尝试使用MAX(to_timestamp(my_date/1000))
,查询:
select myItem, MAX(to_timestamp(my_date/1000))
from history_table
where to_timestamp(sign_date/1000)::date >= '2019-01-01'9
group by myItem
order by myitem;
答案 2 :(得分:1)
在T-Sql中:
select
myItem,
to_timestamp(MAX(my_date)/1000) as my_date_Timestamp
from history_table
Group by myItem
Order by my_date_Timestamp DESC