我有一个SQL服务器数据库,我想删除除最后15行之外的所有行,但是,我需要根据'UserID'进行操作。
我的数据库包含许多不同用户的条目,其ID为“UserID”列,因此我希望每个用户在数据库中有15个条目,要删除旧条目。
SQL会是什么?
以下是我自己的一个例子:
$sql = "DELETE FROM SocialSenseTracking WHERE UserID NOT IN (SELECT TOP 15 UserID='$user' FROM SocialSenseTracking ORDER BY UserID DESC)";
答案 0 :(得分:5)
您可以使用CTE和row_number()
:
with todelete as (
select sst.*, row_number() over (partition by UserId order by CreatedAt desc) as seqnum
from SocialSenseTracking sst
)
delete from todelete
where seqnum > 15;
您没有指定用于确定最新记录的列,所以我刚刚发明了CreatedAt
。