我不确定该如何措辞,但是我Start
和End
时间在不同的行中,我想将它们合并为一行。在此样本数据中,它基本上是跟踪/记录项目时间:
Project Type Time
A Start 1:00
A End 1:10
B Start 2:00
B End 2:10
B Start 2:30
B End 2:45
C End 3:00
D Start 3:10
D End 3:20
我正在寻找的是这样的:
Project Start End
A 1:00 1:10
B 2:00 2:10
B 2:30 2:45
C NULL 1:10
D 3:10 3:20
这两个奇怪的部分是:
谁能指出我正确的方向?我在Stackoverflow上找不到具有这些相同要求的任何内容。
这是种隔and问题。
我会用lag()
一个窗口来解决这个问题sum()
。一个新的小组开始,每次连续记录类型不'Start'
跟一个'End'
。
select
project,
min(case when type = 'Start' then time end) Start,
max(case when type = 'End' then time end) [End]
from (
select
t.*,
sum(case when type = 'End' and lag_type = 'Start' then 0 else 1 end)
over(partition by project order by time) grp
from (
select
t.*,
lag(type) over(partition by project order by time) lag_type
from mytable t
) t
) t
group by project, grp
order by project, grp
项目| 开始| 结束 :------ | :---- | : -A | 1:00 | 1:10 B | 2:00 | 2:10 B | 2:30 | 2:45 | 空 | 3:00 D | 3:10 | 3:20
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句