I am trying to get the rank column of this table.
| Key | Date1 | Name1 | Location1 |
|---|---|---|---|
| 20 | 2021-12-30 | Ann | Site A |
| 23 | 2021-12-31 | Ann | Site A |
| 26 | 2022-01-03 | Ann | Site A |
| 28 | 2022-01-04 | Ann | Site A |
| 29 | 2022-01-05 | Ann | Site A |
| 32 | 2022-01-06 | Ann | Site A |
| 62 | 2022-01-08 | Ann | Site A |
| 63 | 2022-01-10 | Ann | Site A |
| 64 | 2022-01-11 | Ann | Site A |
| 65 | 2022-01-12 | Ann | Site A |
| 66 | 2022-01-13 | Ann | Site A |
Desired Output:
| Key | Date1 | Name1 | Location1 | Rank1 |
|---|---|---|---|---|
| 20 | 2021-12-30 | Ann | Site A | 1 |
| 23 | 2021-12-31 | Ann | Site A | 2 |
| 26 | 2022-01-03 | Ann | Site A | 1 |
| 28 | 2022-01-04 | Ann | Site A | 2 |
| 29 | 2022-01-05 | Ann | Site A | 3 |
| 32 | 2022-01-06 | Ann | Site A | 4 |
| 62 | 2022-01-08 | Ann | Site A | 1 |
| 63 | 2022-01-10 | Ann | Site A | 1 |
| 64 | 2022-01-11 | Ann | Site A | 2 |
| 65 | 2022-01-12 | Ann | Site A | 3 |
| 66 | 2022-01-13 | Ann | Site A | 4 |
I tried to use the script that I got from another post, but I still can't get my desired output of Rank Column
select
t.Date1,
t.Name1,
t.Location1,
row_number() over (partition by Name1, Location1, grp order by KEY1) as Rank1
from
(
select
t.*,
sum(case when gap > 1 then 1 else 0 end) over (partition by Name1, Location1, order by KEY1) as grp
from
(select
t.*,
isnull(datediff(day, Date1, lag(Date1) over (partition by Name1, Location1, order by KEY1)), 1) as gap
from Table1 t
) t
) t;
Thank you.