SQL - 分组依据的子组中的期间范围
SQL - Period range in subgroups of a group by
我有以下数据集:
A
B
C
1
John
2018-08-14
1
John
2018-08-20
1
John
2018-09-03
2
John
2018-11-13
2
John
2018-12-11
2
John
2018-12-12
1
John
2020-01-20
1
John
2020-01-21
3
John
2021-03-02
3
John
2021-03-03
1
John
2020-05-10
1
John
2020-05-12
我希望得到以下结果:
A
B
C
1
John
2018-08-14
2
John
2018-11-13
1
John
2020-01-20
3
John
2021-03-02
1
John
2020-05-10
如果我按 A、B 分组,第一行和第三行只是连接在一起,这是连贯的。我怎样才能创建另一个列来仍然使用分组依据并获得我想要的结果。
如果您有与我不同的想法,请解释一下!
我尝试使用一些 first, last, rank,dense_rank 但没有成功。
使用延迟()。看起来 B 是数据中 A 的函数。所以检查 lag(A) 就足够了。
select A,B,C
from (
select *, case when lag(A) over(order by C) = A then 0 else 1 end startFlag
from mytable
) t
where startFlag = 1
order by C
我有以下数据集:
A | B | C |
---|---|---|
1 | John | 2018-08-14 |
1 | John | 2018-08-20 |
1 | John | 2018-09-03 |
2 | John | 2018-11-13 |
2 | John | 2018-12-11 |
2 | John | 2018-12-12 |
1 | John | 2020-01-20 |
1 | John | 2020-01-21 |
3 | John | 2021-03-02 |
3 | John | 2021-03-03 |
1 | John | 2020-05-10 |
1 | John | 2020-05-12 |
我希望得到以下结果:
A | B | C |
---|---|---|
1 | John | 2018-08-14 |
2 | John | 2018-11-13 |
1 | John | 2020-01-20 |
3 | John | 2021-03-02 |
1 | John | 2020-05-10 |
如果我按 A、B 分组,第一行和第三行只是连接在一起,这是连贯的。我怎样才能创建另一个列来仍然使用分组依据并获得我想要的结果。
如果您有与我不同的想法,请解释一下!
我尝试使用一些 first, last, rank,dense_rank 但没有成功。
使用延迟()。看起来 B 是数据中 A 的函数。所以检查 lag(A) 就足够了。
select A,B,C
from (
select *, case when lag(A) over(order by C) = A then 0 else 1 end startFlag
from mytable
) t
where startFlag = 1
order by C