Группировать строки по 6-месячным периодам, начиная с сегодняшнего дня в SQL Server - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь получить количество строк с метками времени, возвращающимися в 6-месячные группы с сегодняшнего дня.Например, я хотел бы напечатать Год, затем, какую половину года, а затем количество записей, содержащихся в этой группе.

Я пробовал это:

SELECT dateadd(month, datediff(month, 6, TimeStamp),0), DATEPART(Year, TimeStamp), count(*)
FROM Table
WHERE row1 = 'Blah'
GROUP BY dateadd(month, datediff(month, 6, TimeStamp),0), DATEPART(Year, TimeStamp)
ORDER BY dateadd(month, datediff(month, 6, TimeStamp),0), DATEPART(Year, TimeStamp)

Ноэто не дает мне ожидаемые группы.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы должны иметь возможность воспользоваться SQL Server целочисленным делением для вычисления номера семестра.

SELECT YEAR(TimeStamp) year, 1 + MONTH(TimeStamp) / 7 semester, count(*)
FROM mytable 
WHERE row1 = 'Blah'
GROUP BY YEAR(TimeStamp), 1 + MONTH(TimeStamp) / 7
ORDER BY year, semester

Например:

  • С января (от месяца 1) до июня (6), целочисленное деление на 7 возвращает 0: + 1 делает его первым семестром
  • , начиная с июля, деление возвращает 1
0 голосов
/ 12 февраля 2019

Я думаю, вам не нужно использовать DataAdd() функцию.Попробуйте следующий запрос:

SELECT DATEPART(Year, TimeStamp), 
       CASE WHEN DATEPART(quarter,[Date]) >= 3 THEN 2 ELSE 1 END as [Semester], count(*)
FROM Table
WHERE row1 = 'Blah'     
GROUP BY DATEPART(Year, TimeStamp), 
         CASE WHEN DATEPART(quarter,[Date]) >= 3 THEN 2 ELSE 1 END
ORDER BY DATEPART(Year, TimeStamp),[Semester]

Если вы хотите рассчитать квартал, используйте:

DATEPART(quarter,[Date]) as [Quarter]
...