从大于1的count处删除,但保持一行

use*_*871 7 sql sql-server

我有一个这样的表(SQL2008):

id   url                  updated
1    http://url1.com      null
2    http://url2.com      <datetime>
3    http://url1.com      <datetime>
Run Code Online (Sandbox Code Playgroud)

我想删除其中一条url1.com记录(最好是更新的地址不是空的,但如果它不起作用则很好)

我有这个查询,删除所有重复项 - 但不保留记录(这是我感到困惑的地方):

DELETE FROM [table] WHERE url IN (
    SELECT url
    FROM [table]
    GROUP BY url
    HAVING COUNT(*) > 1 )
Run Code Online (Sandbox Code Playgroud)

如何限制删除?结果理想情况是:

id   url                  updated
1    http://url1.com      null
2    http://url2.com      <datetime>
Run Code Online (Sandbox Code Playgroud)

现在它最终结果如下:

id   url                  updated
2    http://url2.com      <datetime>
Run Code Online (Sandbox Code Playgroud)

Lam*_*mak 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
Run Code Online (Sandbox Code Playgroud)