Ответ 1
SELECT date_trunc('day', user_logs.timestamp) "day", count(*) views
FROM user_logs
WHERE user_logs.timestamp >= %(timestamp_1)s
AND user_logs.timestamp <= %(timestamp_2)s
group by 1
ORDER BY 1
У меня есть таблица, в которой хранятся журналы доступа пользователя/просмотра для выполняемого веб-сервиса. Он отслеживает время как временную метку, хотя я нахожу, когда я делаю сводную отчетность, мне нужен только день, а не время.
В настоящее время выполняется следующий запрос:
SELECT user_logs.timestamp
FROM user_logs
WHERE user_logs.timestamp >= %(timestamp_1)s
AND user_logs.timestamp <= %(timestamp_2)s
ORDER BY user_logs.timestamp
Часто существуют другие условия, но они не должны иметь значения для вопроса. Я использую Postgres, но я предполагаю, что любая функция будет использоваться на других языках.
Я вытаскиваю результаты в Python script, который подсчитывает количество просмотров за дату, но для меня было бы гораздо больше смысла, если бы база данных могла группироваться и рассчитывать на меня.
Как это сделать, чтобы он группировался по дням и игнорировал время?
SELECT date_trunc('day', user_logs.timestamp) "day", count(*) views
FROM user_logs
WHERE user_logs.timestamp >= %(timestamp_1)s
AND user_logs.timestamp <= %(timestamp_2)s
group by 1
ORDER BY 1