如何从SQL表中删除非每个组中最大记录的内容。
如何从SQL表中删除非每个组中最大记录的内容。
此问题已经在这里有了答案:
我有一个如下模式的表:
ID NVARCHAR(10) Message NVARCHAR(300) UpdateTime DATETIME
其中ID是一个外键。新的消息记录以相同的UpdateTime
聚集添加。例如(按ID
和UpdateTime
排序):
ID | Status | UpdateTime --------------------------------- 42 Cluster1-Msg1 2012-12-25 42 Cluster1-Msg2 2012-12-25 42 Cluster2-Msg1 2013-10-10 42 Cluster2-Msg2 2013-10-10 43 Cluster4-Msg1 2011-11-27
在这里,ID#42与4条消息相关联,在不同的日期上聚集在两个组中,而ID#43仅与一条消息相关联。
偶尔,我希望通过为每个具有相同ID的组删除所有 UpdateTime
小于组内最大值的消息记录来清除此表。在上面的示例中,最终结果将是:
42 Cluster2-Msg1 2013-10-10 42 Cluster2-Msg2 2013-10-10 43 Cluster4-Msg1 2011-11-27
以下SQL查询定位了我想要删除的所有记录:
SELECT Msgs.ID, Msgs.UpdateTime FROM Messages Msgs JOIN (SELECT ID, MAX(UpdateTime) AS MaxTime FROM Messages GROUP BY ID) MaxTimes ON Msgs.ID = MaxDates.ID WHERE Msgs.UpdateTime < MaxTimes.MaxTime
现在,我希望编写一个DELETE语句,删除与上面查询返回的记录相匹配的项目。记录必须基于ID
和 UpdateTime
的值进行删除。我只是不明白如何在Transact-SQL中表达这一点。
admin 更改状态以发布 2023年5月20日