Найти последний вид активности за каждый день
Есть таблица вида:
CREATE TABLE actions (
user VARCHAR2(10),
action VARCHAR2(10),
data TIMESTAMP
);
INSERT INTO actions
VALUES
('user_1', 'like', '2000-04-11 11:00'),
('user_1', 'message', '2000-04-11 12:00'),
('user_1', 'repost', '2000-04-11 13:00'),
('user_1', 'message', '2000-04-12 21:00'),
('user_2', 'comment', '2000-04-12 22:00'),
('user_2', 'message', '2000-04-12 23:00'),
('user_2', 'message', '2000-04-14 11:00');
Нужно для каждого дня определить последний вид активности юзера.
Ответы (3 шт):
Автор решения: Alexey
→ Ссылка
Попробуйте так:
SELECT action
FROM actions
WHERE user = 'user_1'
AND data = (
SELECT MAX(data)
FROM actions
WHERE user = 'user_1'
)
Автор решения: hesoyam
→ Ссылка
SELECT *
FROM actions
GROUP BY user, strftime('%d', data)
HAVING MAX(data);
Автор решения: teran
→ Ссылка
Если версия СУБД поддерживает оконные функции, то так:
SELECT user, action
FROM (
SELECT user
, action
, ROW_NUMBER() OVER (PARTITION BY user ORDER BY data DESC) AS rn
FROM actions
) AS t
WHERE rn = 1