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

时间:2015-07-08 12:21:17

标签: php sql sql-server database 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)";

1 个答案:

答案 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