Допустим, есть таблица, структурированная так:
ID | article_id | article_count | created_at
---|------------------------------------------
1 | 1 | 10 | 2019-03-20T18:20:03.685059Z
2 | 1 | 22 | 2019-03-20T19:20:03.685059Z
3 | 2 | 32 | 2019-03-20T18:20:03.685059Z
4 | 2 | 20 | 2019-03-20T19:20:03.685059Z
5 | 1 | 3 | 2019-03-21T18:20:03.685059Z
6 | 1 | 15 | 2019-03-21T19:20:03.685059Z
7 | 2 | 3 | 2019-03-21T18:20:03.685059Z
8 | 2 | 30 | 2019-03-21T19:20:03.685059Z
Теперь цель состоит в том, чтобы суммировать по всем article_count
всех article_ids
для последних записей в деньи вернуть этот общий счет за день.Так что в приведенном выше случае я хотел бы получить результат, показывающий:
total | date
--------|------------
42 | 2019-03-20
45 | 2019-03-21
До сих пор я пробовал что-то вроде:
SELECT SUM(article_count), DATE_TRUNC('day', created_at)
FROM myTable
WHERE created_at IN
(
SELECT DISTINCT ON (a.created_at::date, article_id::int) created_at
FROM myTable a
ORDER BY created_at::date DESC, article_id, created_at DESC
)
GROUP BY DATE_TRUNC('day', created_at)
В отдельном запросе я пытался получить толькосамые последние записи в день для article_id
и затем соответствуют created_at
, чтобы суммировать все значения article_count
.Это не работает - он по-прежнему выводит сумму за весь день вместо суммирования по последним записям.
Кроме того, я вполне уверен, что может быть более элегантный способ, чем условие where.
Заранее спасибо (а также за любые объяснения).