从数据库中为每个 UserID 删除除最后 15 个之外的所有条目
Remove all entries except last 15 from database for each UserID
我有一个 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)";
您可以使用 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
。
我有一个 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)";
您可以使用 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
。