Вытянуть данные по максимальной дате и установить значение по условию

В таблице cs_reward_point_changes есть столбцы 'user_id', 'amount' и 'timestamp'. Для некоторых 'user_id' есть несколько строк с данными с разными датами.

Мне нужно с помощью SQL запроса выполнить два действия:
1) получить для каждого 'user_id' только одну строку - с максимальной датой указанной в столбце 'timestamp'.
2) выполнить проверку по 'timestamp'. Если дата указанная в 'timestamp' МЕНЬШЕ текущей даты на 400 дней, то установить в столбце 'amount' значение равно НОЛЬ

Чтобы выполнить первое действие - пробую SQL запрос:
SELECT user_id, amount, MAX(TIMESTAMP) FROM `cs_reward_point_changes` GROUP BY TIMESTAMP

Но он дает мне все записи для каждого 'user_id', а не только с последней датой...

И еще как-то второе действие нужно выполнить по условию IF timestamp < текущей даты на 400 дней, SET amount=0

Помогите, пожалуйста, объединить это все в один запрос... Заранее благодарен за помощь


Ответы (1 шт):

Автор решения: Akina
SELECT user_id,
       CASE WHEN `timestamp` < CURRENT_DATE - INTERVAL 400 DAY
            THEN 0
            ELSE amount
            END AS amount,
       `timestamp`
FROM cs_reward_point_changes AS t1
NATURAL JOIN (
    SELECT user_id, 
           MAX(`timestamp`) AS `timestamp`
    FROM cs_reward_point_changes 
    GROUP BY 1
) AS t2

DEMO

→ Ссылка