从每个UserID的数据库中删除除最后15个之外的所有条目

Jon*_*800 2 php sql database sql-server sql-delete

我有一个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)";
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 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;
Run Code Online (Sandbox Code Playgroud)

您没有指定用于确定最新记录的列,所以我刚刚发明了CreatedAt.