In SQL Server, let's consider this table:
Id | PartNumber | Timestamp | Reintegration |
---|---|---|---|
1 | 1111 | 2020-01-01 | NULL |
2 | 1111 | 2020-01-02 | NULL |
3 | 2222 | 2021-02-01 | NULL |
4 | 2222 | 2021-02-02 | NULL |
I want to update the Reintegration
column with the MAX
value of a Group By PartNumber
.
Here is the expected result :
Id | PartNumber | Timestamp | Reintegration |
---|---|---|---|
1 | 1111 | 2020-01-01 | NULL |
2 | 1111 | 2020-01-02 | 2020-01-02 |
3 | 2222 | 2021-02-01 | NULL |
4 | 2222 | 2021-02-02 | 2021-02-02 |
I have tried a lot of thing with GROUP BY
, MAX
, INNER JOIN
, without success.
Thanks for any help.
CodePudding user response:
The window function max() over()
seems like a nice fit here.
Example or dbFiddle
with cte as (
Select *
,MaxDate = max([TimeStamp]) over (partition by PartNumber)
from YourTable
)
Update cte set [Reintegration] = MaxDate
Where [TimeStamp] = MaxDate
The Updated Table
Id PartNumber Timestamp Reintegration
1 1111 2020-01-01 NULL
2 1111 2020-01-02 2020-01-02
3 2222 2021-02-01 NULL
4 2222 2021-02-02 2021-02-02