如果超过 50 个则删除条目
Delete entries if more than 50
例如我可以为同一台计算机设置 75 个条目,在这种情况下:clt98079
如果最后的条目超过 50 个(最旧的条目,按日期),我想删除它并保留最新的 50 个条目。我怎样才能完成我的交易?我正在按列检查 pc Hostname
和按列 CheckDate
的旧条目
begin tran
if (Select Count(*) FROM dbo.Clients WHERE Hostname='clt98079') > 50
begin
delete from dbo.Clients where ID in (
select dbo.Clients.CheckDate from dbo.Clients
/////not sure how to finish the last bit here/////
)
end
您的语法看起来像 SQL 服务器,它为您提供了可更新 CTE 的选项:
with todelete as (
select c.*,
row_number() over (partition by hostname order by checkdate desc) as seqnum
from dbo.Clients c
where hostname = 'clt98079'
)
delete from todelete
where seqnum > 50;
请注意,您可以删除 where
子句以保留所有主机名的最新 50 个。
例如我可以为同一台计算机设置 75 个条目,在这种情况下:clt98079
如果最后的条目超过 50 个(最旧的条目,按日期),我想删除它并保留最新的 50 个条目。我怎样才能完成我的交易?我正在按列检查 pc Hostname
和按列 CheckDate
begin tran
if (Select Count(*) FROM dbo.Clients WHERE Hostname='clt98079') > 50
begin
delete from dbo.Clients where ID in (
select dbo.Clients.CheckDate from dbo.Clients
/////not sure how to finish the last bit here/////
)
end
您的语法看起来像 SQL 服务器,它为您提供了可更新 CTE 的选项:
with todelete as (
select c.*,
row_number() over (partition by hostname order by checkdate desc) as seqnum
from dbo.Clients c
where hostname = 'clt98079'
)
delete from todelete
where seqnum > 50;
请注意,您可以删除 where
子句以保留所有主机名的最新 50 个。