SQL отчетность по скользящим кварталам

Это пример данных, которые я использую. На основании этих данных мне нужно будет составить квартальные отчеты. Другими словами, ежемесячные отчеты оглядываются на 3 месяца назад. Проблема в том, что мне нужно будет сообщать средние и суммы. Ниже приведен формат вывода, который я ищу.

Я пытаюсь выяснить, как лучше всего это реализовать? Должен ли я делать расчеты ежеквартально или делать их ежемесячно?

В настоящее время этот процесс выполняется в Excel, поэтому я работаю с таблицами, которые еще не имеют отношений.

1 ответ

Решение грубой силы

WITH MonthData AS (
    SELECT (YEAR(Date) - 2000) * 12 + MONTH(Date) AS MonthNumber
          ,Count1
          ,Count2
    FROM Table
)
,QuarterData AS (
    SELECT MAX(MonthNumber) AS MonthNumber
          ,SUM(Count1)/COUNT(1) AS MeanCount1
          ,SUM(Count2)/COUNT(1) AS MeanCount2
          ,SUM(Count1) AS SumCount1
          ,SUM(Count2) AS SumCount2
    FROM MonthData
    GROUP BY MonthNumber / 3 
  UNION ALL
    SELECT MAX(MonthNumber)
          ,SUM(Count1)/COUNT(1)
          ,SUM(Count2)/COUNT(1)
          ,SUM(Count1)
          ,SUM(Count2)
    FROM MonthData
    GROUP BY (MonthNumber + 1) / 3   
  UNION ALL
    SELECT MAX(MonthNumber)
          ,SUM(Count1)/COUNT(1)
          ,SUM(Count2)/COUNT(1)
          ,SUM(Count1)
          ,SUM(Count2)
    FROM MonthData
    GROUP BY (MonthNumber + 2) / 3 
)
SELECT DATEADD(month, MonthNumber, '20000101') AS Period
      ,MeanCount1
      ,MeanCount2
      ,SumCount1
      ,SumCount2
FROM QuarterData
Другие вопросы по тегам