proudmore
@proudmore

Как разбить выборку по периодам?

fekqzncdgihhuzrmkpei06jugg4.png

Мне нужен запрос, который позволит получить количество документов, принадлежащих контрагенту в разрезе периода: за 7 дней, за 14 дней, за месяц, два

На данный момент для одного периода работает следующее:
SELECT
  COUNT(dow.document_id) as "7 days",
  c.short_name
  FROM documents_owners dow
INNER JOIN contractors_main c ON dow.contractor_id = c.id
INNER JOIN documents_main d ON dow.document_id = d.id
WHERE d.created_at > NOW() - interval '7 days'
GROUP BY c.short_name
ORDER BY COUNT(dow.document_id) DESC


Но писать такую простыню на каждый период а потом как-то их объединять я не хочу
Подскажите, как подобное решается?
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
SELECT
  COUNT(case when d.created_at > NOW() - interval '7 days' then 1 else null end) as "7 days",
  COUNT(case when d.created_at > NOW() - interval '14 days' then 1 else null end) as "14 days",
  COUNT(case when d.created_at > NOW() - interval '1 month' then 1 else null end) as "1 month"
  c.short_name
  FROM documents_owners dow
INNER JOIN contractors_main c ON dow.contractor_id = c.id
INNER JOIN documents_main d ON dow.document_id = d.id
GROUP BY c.short_name
ORDER BY COUNT(dow.document_id) DESC
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы