gpt4 book ai didi

sql - 基于状态变化的分组

转载 作者:行者123 更新时间:2023-12-01 05:52:46 25 4
gpt4 key购买 nike

当前表:

Name    State   Start  Time
A Start 17/01 2pm
A update 17/01 4pm
B Start 18/01 3pm
B Start 18/01 5pm
C Start 18/01 6pm
B Start 19/01 2pm

我正在寻找的输出:
Name    StartTime   End Time
A 17/01 2pm 17/01 4pm
B 17/01 4pm 18/01 5pm
C 18/01 5pm 18/01 6pm
B 18/01 6pm 19/01 2pm

任何人都可以建议吗?

最佳答案

根据您的意见,您应该使用窗口函数 LAG 或 LEAD。看看下面的示例代码:

LAG:访问同一结果集中前一行的数据。

LEAD:从同一结果集中的后续行访问数据。

with
cte
as
(
select
[Name] ,
[State] ,
lag(StartTime) over(order by [Name], [State], StartTime) as StartTime ,
StartTime as EndTime
from
dbo.Test
)
select
[Name] ,
[State] ,
min(StartTime) as StartTime ,
max(EndTime) as EndTime
from
cte
group by
[Name] ,
[State]

关于sql - 基于状态变化的分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52398183/

25 4 0
文章推荐: python - 字典在迭代期间改变大小
文章推荐: java - 使用 Groovy 使用 JSON 服务返回 List