在按1列分组时,删除仅超过50行的记录

时间:2013-08-14 18:54:13

标签: sql-server sql-server-2008

假设我有21位经销商有记录。一些经销商的记录超过50行。作为所需的管家清理的一部分,我需要删除每个经销商大于/早于50个记录的记录,但保留记录#1到#50。

我无法绕过那个。我看到几个选项,1)按经销商ID分组,2)按时间戳排序

由于

---Schema Fields---
ID               bigint
SearchID         bigint
AccountID        bigint
UserID           bigint
VIN              varchar
Year             varchar
Make             varchar
Model            varchar
Trim             varchar
[TimeStamp]      datetime
--------------------

AccountID是经销商ID。 ID是要删除的目标记录标识符。 TimeStamp用作OrderBy。

1 个答案:

答案 0 :(得分:4)

鉴于您没有提供表模式,请假设该表看起来像

MyDealersTable
- DealerID
- SomeOtherColumn
- DealerMotherName
- DealerSportInterest
- SomeTimeStamp 

您可以尝试类似

的内容
;WITH Dealers AS (
    SELECT *,
        ROW_NUMBER() OVER(PARTITION BY DealerID ORDER BY SomeTimeStamp DESC) RowID
    FROM MyDealersTable
)
DELETE 
FROM Dealers
WHERE RowID > 50

来自WITH common_table_expression (Transact-SQL)

  

指定临时命名结果集,称为公用表   表达式(CTE)。这是从简单查询派生而来定义的   在单个SELECT,INSERT,UPDATE或的执行范围内   DELETE语句。