PostgreSQL:删除记录以保持记录具有最新的时间戳

时间:2016-12-28 14:16:26

标签: postgresql timestamp

假设我有一个包含一列时间戳和一列ID(数字)的表。对于每个ID,我正在尝试删除除了具有最新时间戳的行之外的所有行。

这是我到目前为止的代码:

DELETE FROM table_name t1
WHERE  EXISTS (SELECT * FROM table_name t2
WHERE t2."ID" = t1."ID"
AND t2."LOCAL_DATETIME_DTE" > t1."LOCAL_DATETIME_DTE")

此代码似乎有效,但我的问题是:为什么在时间戳比较中它是>符号而不是<符号?这是不是选择删除所有具有比另一行更晚的时间戳的行?我认为这段代码只会保留每个ID最早的时间戳行。

2 个答案:

答案 0 :(得分:0)

您可以使用“record”伪类型来匹配元组:

DELETE FROM table_name 
WHERE (ID,LOCAL_DATETIME_DTE) not in 
(SELECT ID,max(LOCAL_DATETIME_DTE) FROM table_name group by id);

答案 1 :(得分:0)

您正在使用EXISTS运算符删除记录,其记录可以找到更大的>时间戳。对于最新的,没有具有更高时间戳的记录,因此WHERE子句不会解析为true,因此保留记录。