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

Рейтинг: 1Ответов: 3Опубликовано: 22.06.2023

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

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');

Нужно для каждого дня определить последний вид активности юзера.

Ответы

▲ 1Принят
SELECT *
FROM actions
GROUP BY user, strftime('%d', data)
HAVING MAX(data);
▲ 1

Если версия СУБД поддерживает оконные функции, то так:

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
▲ 0

Попробуйте так:

SELECT action 
FROM actions 
WHERE user = 'user_1' 
    AND data = (
       SELECT MAX(data) 
       FROM actions 
       WHERE user = 'user_1'
    )