如何更新 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
)
我有 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
)