[英]How to select only the row with the latest date, in a set of groups of rows?
我们的代码中存在历史错误。 在一个表中,随着时间的推移,许多不同的记录将使用新信息进行更新,有时会在应该更新现有行的地方创建新行。
在后续查询中, 两行数据都被加载到我们的UI的单行中,而原始记录中的数据则被卡在那里,因为所有将来的更新都保存到了新行中,并且数据从旧记录中永久地加载了,无法保存回去。
我有一个查询,该查询以ID
, ErrorGroupID
, LastUpdatedDate
的形式返回数据。 这给了我所有发生这种情况的行组。
所以:
ID |ErrorGroupID|LastUpdatedDate
----------------------------------
1 |1 |01/01/2000
2 |1 |01/01/2001
3 |2 |01/01/2002
4 |2 |01/01/2003
5 |3 |01/01/2004
6 |3 |01/01/2005
7 |3 |01/01/2006
我需要删除具有特定ErrorGroupID
所有行,但每个组中具有最高日期值的行除外。
我的SQL-fu似乎使我迷路了。 如何获取需要删除的行的ID值?
您可以直接将其删除:
delete from table
where
ErrorGroupID = 1
and LastUpdatedDate <
(
select
max(LastUpdatedDate)
from
table
where
ErrorGroupID = 1
)
或者select ID from table
如果您确实更喜欢获取ID而不是仅仅删除select ID from table
则只需更改delete from table
中select ID from table
。
若要同时理解所有组(ErrorGroupID),请使用IN子句或将此查询加入到原始查询中。
您可以尝试以下查询
;WITH cte AS (
SELECT ID
, ErrorGroupID, LastUpdatedDate
, ROW_NUMBER() OVER(PARTITION BY ErrorGroupID ORDER BY LastUpdatedDate DESC ) AS rownum
FROM theTable
)
DELETE theTable
FROM theTable
JOIN cte ON theTable.ErrorGroupID = cte.ErrorGroupID
WHERE cte.Rownum>1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.