Given the Date
and Type
columns, I want to create the column Group
like in the table below where a Type
of "A" marks the beginning of each group
Date | Type | Group |
---|---|---|
2019-09-26 | A | 1 |
2019-09-26 | B | 1 |
2019-10-09 | B | 1 |
2020-08-18 | A | 2 |
2020-09-25 | B | 2 |
2020-09-27 | B | 2 |
2021-02-19 | B | 2 |
2021-07-04 | A | 3 |
2021-08-04 | B | 3 |
2022-03-17 | A | 4 |
2022-05-01 | B | 4 |
2022-05-05 | B | 4 |
CodePudding user response:
Using CONDITIONAL_TRUE_EVENT windowed function:
Returns a window event number for each row within a window partition based on the result of the boolean argument expr1. The number starts from 0 and is incremented by 1 for each row on which the expr1 evaluates to true.
SELECT *, CONDITIONAL_TRUE_EVENT(Type='A') OVER(ORDER BY Date) 1 AS grp
FROM tab
ORDER BY Date;