Please consider this records:
| Name | Year | Season |
|---|---|---|
| Name1 | 2011 | 1 |
| Name1 | 2011 | 2 |
| Name2 | 2012 | 1 |
| Name2 | 2012 | 2 |
| Name2 | 2012 | 3 |
| Name2 | 2012 | 4 |
| Name3 | 2012 | 3 |
| Name3 | 2012 | 4 |
| Name4 | 2012 | 1 |
| Name4 | 2012 | 4 |
| Name5 | 2012 | 3 |
| Name5 | 2012 | 4 |
| Name5 | 2013 | 1 |
| Name5 | 2013 | 2 |
I want to get records that have 4 record in 4 seasons in a row. For example for above records I want to get Name2 and Name5 because Name2 has 4 records in each season in 2012 and Name5 has 4 records for 4 seasons in a row (for years 2012 and 2013). I tried to partition these records with Row_Number but it failed when we have 4 records in different years.
How can I achieve my desire result?
If I have below records for Name3:
| Name | Year | Season |
|---|---|---|
| ... | ||
| Name3 | 2014 | 1 |
| Name3 | 2014 | 2 |
| ... |
then Name3 wouldn't add to result because it hasn't 4 records for 4 seasons continuously.
Assuming there are no duplicates:
Yearby4then adding theSeason.LAG.HAVINGclause that there is at least one row where the row 3 previous to it is exactly 3 seasons earlier.db<>fiddle
Instead of using a
SeasonCode, you could also do multiple conditions onYearandSeason.