根据2种排序标准更新1条记录

时间:2017-11-13 21:28:50

标签: sql oracle

您知道如何根据2种排序条件更新1条记录吗?

我在表A中:

id    |     date    | boolean  | data 
-------------------------------------------
001    | 11.13.2017  |    0     | value 1
001    | 09.13.2017  |    1     | value 2
001    | 01.01.2017  |    0     | value 0
002    | 06.15.2017  |    1     | value 3
003    | 04.23.2017  |    1     | value 4
003    | 12.13.2017  |    0     | value 5

我想通过id,根据最近的日期更改布尔值。

例如:

id     |     date    | boolean  | data 
-------------------------------------------
001    | 11.13.2017  |    1     | value 1 
001    | 09.13.2017  |    0     | value 2
001    | 01.01.2017  |    0     | value 0

谢谢

3 个答案:

答案 0 :(得分:0)

- 更新最近ID的布尔值

UPDATE TableA SET boolean = 1 WHERE date = SELECT date FROM(SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER BY date DESC) AS RowNum,date FROM TableA) AS TableB WHERE RowNum = 1

答案 1 :(得分:0)

UPDATE a
SET a.boolean='True'
FROM tableA AS a
INNER JOIN  (
     SELECT b.id, max(b.date) AS 'LatestDate'
     FROM tableA AS b
     GROUP BY b.id
 ) as c
 ON a.id=c.id AND a.date=c.LatestDate;

以下是SQL Fiddle链接:http://sqlfiddle.com/#!6/bfb3e8/2

答案 2 :(得分:0)

您可以使用row_number找到每个ID的最新记录。您需要发出2个UPDATE语句,一个用于将最新记录更新为1,另一个用于将其他记录重新设置为0.

希望下面的查询能够回答您的问题。如果使用的是真正的布尔列,请将值更改为True和False。

foo2