使用组的最大值更新列
Update column with the max of a group
在SQL服务器中,让我们考虑这个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
我想用 Group By PartNumber
的 MAX
值更新 Reintegration
列。
这是预期的结果:
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
我用 GROUP BY
、MAX
、INNER JOIN
尝试了很多东西,但都没有成功。
感谢您的帮助。
window 函数 max() over()
似乎很适合这里。
示例或dbFiddle
with cte as (
Select *
,MaxDate = max([TimeStamp]) over (partition by PartNumber)
from YourTable
)
Update cte set [Reintegration] = MaxDate
Where [TimeStamp] = MaxDate
更新后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
在SQL服务器中,让我们考虑这个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 |
我想用 Group By PartNumber
的 MAX
值更新 Reintegration
列。
这是预期的结果:
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 |
我用 GROUP BY
、MAX
、INNER JOIN
尝试了很多东西,但都没有成功。
感谢您的帮助。
window 函数 max() over()
似乎很适合这里。
示例或dbFiddle
with cte as (
Select *
,MaxDate = max([TimeStamp]) over (partition by PartNumber)
from YourTable
)
Update cte set [Reintegration] = MaxDate
Where [TimeStamp] = MaxDate
更新后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