我有一个这样的表(SQL2008):
id url updated
1 http://url1.com null
2 http://url2.com <datetime>
3 http://url1.com <datetime>
我想删除其中一条url1.com记录(最好是更新的地址不为空,但如果它不起作用则没问题)
我有这个查询,删除所有重复项 - 但不保留记录(这是我感到困惑的地方):
DELETE FROM [table] WHERE url IN (
SELECT url
FROM [table]
GROUP BY url
HAVING COUNT(*) > 1 )
如何限制删除?理想情况下结果是:
id url updated
1 http://url1.com null
2 http://url2.com <datetime>
现在最终结果如下:
id url updated
2 http://url2.com <datetime>
答案 0 :(得分:10)
如果SQL2008
是SQL Server 2008,那么您可以这样做:
;WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER( PARTITION BY url
ORDER BY updated DESC)
FROM [table]
)
DELETE FROM CTE
WHERE RN > 1
答案 1 :(得分:1)
试试这个
DELETE FROM [table] WHERE id NOT IN (
SELECT MAX(id)
FROM [table]
GROUP BY url
)