1

假设我有 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。

4

1 回答 1

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 语句的执行范围内定义。

于 2013-08-14T19:01:57.140 回答