I need to display a New Sequence column value based on the Score 1 or 0.
x
MonthlyDate Score New Sequence
----------- ------ ----------
2019-08-01 1 0
2019-08-02 0 1
2019-08-03 0 2
2019-08-04 0 3
2019-08-05 1 0
2019-08-06 0 1
2019-08-07 0 2
2019-08-08 0 3
I am trying to achieve on of the calculation in my project based on the new sequence value.
I have tried sum(score) over (Order By Date rows unbounded preceding)
Case when Score = 1
THEN 0
ELSE (CASE WHEN LAG(Score) OVER (ORDER BY MonthlyDate) = 0
THEN 1
ELSE (SUM(Score) over (Order by MonthlyDate rows unbounded preceding))
END)
END as NewSequence
Advertisement
Answer
I use mysql because the online tool but very similar in sql server.
with cte as (
SELECT *, SUM(Score) OVER (ORDER BY MonthlyDate) as grp
FROM scores
)
SELECT *, ROW_NUMBER() OVER (PARTITION BY grp ORDER BY MonthlyDate) as new_seq
FROM cte
OUTPUT
| MonthlyDate | Score | New_Sequence | grp | new_seq |
| ------------------- | ----- | ------------ | --- | ------- |
| 2019-08-01 00:00:00 | 1 | 0 | 1 | 1 |
| 2019-08-02 00:00:00 | 0 | 1 | 1 | 2 |
| 2019-08-03 00:00:00 | 0 | 2 | 1 | 3 |
| 2019-08-04 00:00:00 | 0 | 3 | 1 | 4 |
| 2019-08-05 00:00:00 | 1 | 0 | 2 | 1 |
| 2019-08-06 00:00:00 | 0 | 1 | 2 | 2 |
| 2019-08-07 00:00:00 | 0 | 2 | 2 | 3 |
| 2019-08-08 00:00:00 | 0 | 3 | 2 | 4 |