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

时间:2014-02-28 19:28:52

标签: sql sql-server

我有一个这样的表(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>

2 个答案:

答案 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
     )