gpt4 book ai didi

tsql - 删除与分组依据

转载 作者:行者123 更新时间:2023-12-05 02:24:13 27 4
gpt4 key购买 nike

表格如下

CREATE TABLE [dbo].[Poll](
[PollID] [bigint] IDENTITY(1,1) NOT NULL,
[LoginID] [bigint] NOT NULL,
[FacilityID] [bigint] NOT NULL,
[PolledAt] [datetime] NOT NULL,
)

我必须每晚清空此表...但保留基于由 LoginID 字段分组的 PolledAt 字段的最大行。这意味着用户 (LoginID) 有多行,到晚上结束时,用户在删除后应该只有一行。该行应该是 MAX(PolledAt) 值。

我可以得到我不想删除的记录:

SELECT
LoginID,
MAX(PolledAt) AS MaxPolledAt
FROM
Poll
GROUP BY
LoginID

但是我不知道如何形成我的删除,因为我没有显示作为 pollid 的主键。我需要获取上述选择的结果并删除除该选择返回的内容之外的所有内容。

最佳答案

您可以使用 Common Table Expressionrow_number()函数以确定需要删除哪些行。

SQL Fiddle

MS SQL Server 2008 架构设置:

CREATE TABLE [dbo].[Poll](
[PollID] [bigint] IDENTITY(1,1) NOT NULL,
[LoginID] [bigint] NOT NULL,
[FacilityID] [bigint] NOT NULL,
[PolledAt] [datetime] NOT NULL,
);


insert into Poll values(1, 1, getdate());
insert into Poll values(1, 1, getdate()+1);
insert into Poll values(1, 1, getdate()+2);
insert into Poll values(1, 1, getdate()+3);
insert into Poll values(2, 2, getdate()+4);

查询 1:

with C as
(
select row_number() over(partition by LoginID order by PolledAt desc) as rn
from Poll
)
delete from C
where rn > 1;

Results :

查询 2:

select *
from Poll;

Results :

| POLLID | LOGINID | FACILITYID |                        POLLEDAT |
-------------------------------------------------------------------
| 4 | 1 | 1 | February, 08 2013 21:48:34+0000 |
| 5 | 2 | 2 | February, 09 2013 21:48:34+0000 |

关于tsql - 删除与分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com