如何更新 MAX() 值 - PostgreSQL

How To Update MAX() Value - PostgreSQL

我有 2 个表:

表A

id  name    group_id    group_name  sub_state
1   User1       1            MG      active
2   User3       3            AG      active

表B

tableA_id       v_date                group_id
   1        2020-01-20T21:51:24.000Z     1          
   2        2020-03-10T21:20:24.000Z     3   
   1        2020-05-05T23:20:24.000Z     1   
   2        2020-05-13T23:20:24.000Z     3   

我想为每个用户更新最近 v_date 的新日期。我相信在这里使用 MAX() 会很有用。

我试过:

UPDATE tableB
SET v_date = '2020-05-27 20:00:13+00'
WHERE v_date = (SELECT MAX(v_date) FROM tableB
     LEFT JOIN tableA ON tableB.tableA_id = tableA.id AND tableB.group_id = tableA.group_id
     WHERE tableA.sub_state = 'active'
     GROUP BY tableA.id);

本次查询returns错误:Query Error: error: more than one row returned by a subquery used as an expression

然后我尝试了:

WITH stat AS (
    SELECT MAX(v_date) FROM tableB
    LEFT JOIN tableA ON tableB.tableA_id = tableA.id AND tableB.group_id = tableA.group_id
    WHERE tableA.sub_state = 'active' AND tableA.group_id = 1
    GROUP BY tableA.id
)   
UPDATE tableB
SET v_date = '2020-05-27 20:00:13+00'
FROM stat
WHERE group_id = 1;

这会更改所有记录的日期,而不仅仅是最后一个或最近的一个。

如何在不影响所有记录的情况下更新每个用户的最后一条记录?

我想你想要:

UPDATE tableB
SET v_date = '2020-05-27 20:00:13+00'
WHERE v_date = (
    SELECT MAX(tb1.v_date) 
    FROM tableB tb1
    WHERE tb1.tableA_id = tableB.tableA_id
)