У меня есть 2 таблицы:
tableA
id name group_id group_name sub_state
1 User1 1 MG active
2 User3 3 AG active
TableB
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);
Этот запрос возвращает ошибку: 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;
Это изменяет дату всех записей, а не только последнюю или недавнюю.
Как я могу обновить последнюю запись от каждого пользователя, не затрагивая все записи за все время?