Вытянуть данные по максимальной дате и установить значение по условию
В таблице 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 шт):
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