如何使用相同的ID2和最新日期更新行U.我可以编写select子句:
SELECT ID2
, MAX(Date)
FROM TABLE
GROUP BY ID2
但我有更新条款的问题。
我有桌子:
ID1 |ID2 |Date |U
1 1 2015-02-18 NULL
2 1 2015-02-11 NULL
3 2 2015-02-17 NULL
4 2 2015-02-14 NULL
5 2 2015-02-11 NULL
6 3 2015-02-14 NULL
7 3 2015-02-10 NULL
我想要实现的目标:
ID1 |ID2 |Date |U
1 1 2015-02-18 Update
2 1 2015-02-11 NULL
3 2 2015-02-17 Update
4 2 2015-02-14 NULL
5 2 2015-02-11 NULL
6 3 2015-02-14 Update
7 3 2015-02-10 NULL
答案 0 :(得分:2)
我将使用CTE
与Row_Number window function
;with cte as
(
select ID1 ,ID2 ,Date ,U, Row_Number() over(partition by ID2 order by Date desc) rn
From Yourtable
)
update Cte set U = 'Update'
where RN=1
如果每个tie
的{{1}}日期为max
,请使用ID2
更新这两个记录。
Dense_rank
答案 1 :(得分:0)
一种方法是使用SELECT ... MAX查询来过滤TABLE。像这样的东西;
UPDATE T SET U = 'UPDATE'
FROM T JOIN (
SELECT ID2
, MAX(Date) AS MaxDate
FROM TABLE
GROUP BY ID2) AS X ON X.ID2 = T.ID2 AND X.MaxDate = T.Date
关于这种方法需要注意的一点是,如果每个ID2的最大日期超过1条记录,那么所有具有最大日期的记录都将被更新。
答案 2 :(得分:0)
实现这一目标的有趣方式:
UPDATE T1
SET T1.U='Update'
FROM TestTable T1
WHERE 0=(SELECT COUNT(1) FROM TestTable T2 WHERE T1.ID2=T.ID2 AND T1.Date<T2.Date)