删除的记录只有50岁以上的行同时通过1列分组(Delete records only older t

2019-10-18 11:54发布

比方说,我有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是目标的记录标识符中进行删除。 时间戳是作为排序依据。

Answer 1:

既然你没有提供表架构的事实,可以说表看起来像

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

从与common_table_expression(的Transact-SQL)

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



文章来源: Delete records only older than 50 rows while grouping by 1 column