假设我有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。
答案 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语句。