I spent a good amount of time searching for a solution on here and google but came up empty. I thought dense_rank() might work but I can’t get it to do what I’m needing. I’m using SSMS 18. What I’m trying to do is assign a unique ID to groups of records that I have partitioned with row_number().
The data looks like this:
| RN | Client_ID | Date |
|---|---|---|
| 1 | xxxx | 2022-08-23 |
| 2 | xxxx | 2022-08-23 |
| 3 | xxxx | 2022-08-23 |
| 1 | xxxx | 2022-08-25 |
| 2 | xxxx | 2022-08-25 |
| 1 | yyyy | 2022-06-10 |
| 2 | yyyy | 2022-06-10 |
| 1 | gggg | 2021-05-06 |
| 2 | gggg | 2021-05-06 |
| 3 | gggg | 2021-05-06 |
| 4 | gggg | 2021-05-06 |
So each group of records now needs to have a unique ID attributed to them. So it would look something like this:
| UnqID | RN | Client_ID | Date |
|---|---|---|---|
| 0001 | 1 | xxxx | 2022-08-23 |
| 0001 | 2 | xxxx | 2022-08-23 |
| 0001 | 3 | xxxx | 2022-08-23 |
| 0002 | 1 | xxxx | 2022-08-25 |
| 0002 | 2 | xxxx | 2022-08-25 |
| 0003 | 1 | yyyy | 2022-06-10 |
| 0003 | 2 | yyyy | 2022-06-10 |
| 0004 | 1 | gggg | 2021-05-06 |
| 0004 | 2 | gggg | 2021-05-06 |
| 0004 | 3 | gggg | 2021-05-06 |
| 0004 | 4 | gggg | 2021-05-06 |
Thanks in advance for any help on this.
row_number()
over (partition by a.PAT_ID, cast(a.EFFECTIVE_DATE_DT as date)
order by case
when a.[EncType_C] = '1000' then 1
when a.[EncType_C] = '101' then 2
when a.[EncType_C] = '3'
and (dpt.DeptNm not like '%X-RAY%' and dpt.DeptNm != 'VCM LAB') then 3
when a.[EncType_C] = '50' then 4
when a.[EncType_C] = '3'
and (dpt.DeptNm like '%X-RAY%' or dpt.DeptNm = 'VCM LAB') then 5
else 6
end,
case
when a.[DeptID] = 100101024 then 1
when a.[DeptID] = 100101055 then 2
else 0
end)
Advertisement
Answer
try using a common table entry cte and groupby
declare @tmp as table(RN int, Client_ID varchar(10), Date Date); insert into @tmp values (1,'xxxx','2022-08-23'), (2,'xxxx','2022-08-23'), (3,'xxxx','2022-08-23'), (1,'xxxx','2022-08-25'), (2,'xxxx','2022-08-25'), (1,'yyyy','2022-06-10'), (2,'yyyy','2022-06-10'), (1,'gggg','2021-05-06'), (2,'gggg','2021-05-06'), (3,'gggg','2021-05-06'), (4,'gggg','2021-05-06'); with cte as ( select distinct Client_ID, Date, Count(Client_ID) over(order by Client_ID,Date) RowID from @tmp group by Client_ID, Date ) --select * from cte select Client_ID, Date, Lookup.UnqID from @tmp tmp cross apply ( select RowID UnqID from cte where tmp.Client_ID=cte.Client_ID and tmp.Date=cte.Date )Lookup
output
Client_ID Date UnqID gggg 2021-05-06 1 gggg 2021-05-06 1 gggg 2021-05-06 1 gggg 2021-05-06 1 xxxx 2022-08-23 2 xxxx 2022-08-23 2 xxxx 2022-08-23 2 xxxx 2022-08-25 3 xxxx 2022-08-25 3 yyyy 2022-06-10 4 yyyy 2022-06-10 4