Найти последний вид активности за каждый день

Есть таблица вида:

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
→ Ссылка