我有几个唯一ID,这些唯一ID具有基于
的重复数据时间戳
我按以下方式为每个唯一ID获取timestamp
的最新数据:
SELECT *
FROM (SELECT uniqueID, timestamp
ROW_NUMBER() OVER(PARTITION BY uniqueID ORDER BY timestamp DESC) rn
FROM table_name
) a
WHERE rn = 1
这样可行,但查询也会返回一个列。所以我的结果集如下所示:
uniqueID timestamp rn
1 15:00 1
2 15:00 1
如何从查询结果中省略列rn?使它看起来像这样:
uniqueID timestamp
1 15:00
2 15:00
答案 0 :(得分:2)
您可以像下面这样更改您的查询。您无需提交*
,只需提及您需要的列。
SELECT a.uniqueid ,
a.timestamp
FROM (
SELECT uniqueid,
timestamp, row_number() OVER(partition BY uniqueid ORDER BY timestamp DESC) rn
FROM table_name) a
WHERE rn = 1
答案 1 :(得分:0)
如果你有很多专栏,你可能会觉得做起来更简单:
SELECT a.*
FROM table_name a
WHERE a.timestamp = (SELECT MAX(a2.timestamp) FROM table_name a2 WHERE a2.uniqueid = a.uniqueid);
此外,如果您在(uniqueid, timestamp)
上有索引,这可能会稍微提高一点。
具有讽刺意味的是,Postgres有一个更简单的解决方案(你指的是Postgres教程):
select distinct on (uniqueid) a.*
from table_name a
order by uniqueid, timestamp desc;