PostgreSQL:删除记录以保留具有最新时间戳的记录
问题描述:
比方说,我有一个包含一列时间戳和一列ID(数字)的表。对于每个ID,我试图删除除最后一个时间戳之外的所有行。PostgreSQL:删除记录以保留具有最新时间戳的记录
这里是我到目前为止的代码:
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最早时间戳的行。
答
您使用的是EXISTS
运营商删除该记录可以用较大,从而>
,时间戳可以找到记录。对于最新的,没有具有较高时间戳的记录,所以WHERE
子句未解析为true
,因此记录保留。
答
您可以使用“记录”的伪类型来匹配元组:
DELETE FROM table_name
WHERE (ID,LOCAL_DATETIME_DTE) not in
(SELECT ID,max(LOCAL_DATETIME_DTE) FROM table_name group by id);
+0
谢谢你做这种替代方式! – CoteDor
感谢您的解释! – CoteDor