I have the below table called TestTable
and need to update the MsgNum
column to have a unique number ordered by the date column but grouped by the JobNum
.
JobNum | MsgNum | Date 320 | 0 | 2020-04-10 320 | 0 | 2020-06-11 320 | 0 | 2020-06-12 330 | 0 | 2020-04-10 330 | 0 | 2020-06-11 330 | 0 | 2020-06-12
Below is what I need to end up with.
JobNum | MsgNum | Date 320 | 1 | 2020-04-10 320 | 2 | 2020-06-11 320 | 3 | 2020-06-12 330 | 1 | 2020-04-10 330 | 2 | 2020-06-11 330 | 3 | 2020-06-12
I have the below that seems to work to generate the ID number that but suck on how to update the table MsgNum
column with the ID number.
SELECT [JobNum], [MsgNum] , ROW_NUMBER() OVER (PARTITION BY [JobNum] ORDER BY [Date]) AS id FROM [dbo].[TestTable]
Advertisement
Answer
You can use row_number()
and an updateable common-table-expression:
with cte as ( select msgNum, row_number() over(partition by jobNum order by Date) rn from mytable ) update cte set msgNum = rn