Вы можете использовать что-то вроде этого:
SELECT LEFT(CONVERT(nvarchar(10),[DateField],112),6) as [Date],
COUNT(*) as [Total]
FROM YourTable
WHERE DATEDIFF(month,[DateField],GETDATE()) < 6
GROUP BY LEFT(CONVERT(nvarchar(10),[DateField],112),6)
ORDER BY LEFT(CONVERT(nvarchar(10),[DateField],112),6) DESC
На моих фиктивные данные с 12 месяцев я получаю:
Date Total
201607 207
201606 270
201605 279
201604 270
201603 279
201602 261
Если вам нужно кумулятивный данные:
;WITH cte AS (
SELECT LEFT(CONVERT(nvarchar(10),[DateField],112),6) as [Date],
COUNT(*) as [Total]
FROM YourTable
WHERE DATEDIFF(month,[DateField],GETDATE()) < 6
GROUP BY LEFT(CONVERT(nvarchar(10),[DateField],112),6)
)
SELECT c1.[Date],
SUM(c2.[Total]) as [Total]
FROM cte c1
INNER JOIN cte c2
ON c1.[Date] >= c2.[Date]
GROUP BY c1.[Date], c1.[Total]
ORDER BY c1.[Date] DESC
Выход:
Date Total
201607 1566
201606 1359
201605 1089
201604 810
201603 540
201602 261
вы можете показать схему таблицы, которую вы запрашиваете с некоторыми данными выборки, пожалуйста? – Tanner
@Tanner Извините за отсутствие информации, я добавил его сейчас, но у меня есть правильный ответ от vercelli. – Drazen