SQL:按特定时间而不是年份分组

时间:2018-07-19 08:22:56

标签: sql sql-server date group-by

我有以下查询:

SELECT DATEPART(yyyy, ap.Date) AS 'Year', COUNT(p.Name2) AS 'Times entered', p.Name2 AS 'Name'       
FROM Person p  JOIN Price ap ON ap.PersonId = p.ID   
GROUP BY p.Name2, DATEPART(yyyy, ap.Date) 
ORDER BY DATEPART(yyyy, ap.Date) DESC , p.Name2 ASC

结果,我有以下数据:

2018    50  Bob
2018    40  Fred
2017    10  Bob
2017    5   Fred

我真正想要的不是按年份分组,而是按2017年7月至2018年6月的时间分组。

我想按2017年7月至2018年6月的时间分组。

如何在SQL中按函数将时间范围设置为一组?

1 个答案:

答案 0 :(得分:2)

类似的事情应该起作用:

SELECT g.my AS 'Month-Year', 
       COUNT(p.Name2) AS 'Times entered', 
       p.Name2 AS 'Name'       
FROM Person p  
JOIN Price ap ON ap.PersonId = p.ID   
CROSS APPLY 
(
   SELECT CONCAT(DATEPART(mm, ap.Date), '-', DATEPART(yyyy, ap.Date)) AS my 
) AS g
WHERE ap.Date BETWEEN '2017-07-01' AND '2018-06-30'
GROUP BY p.Name2, g.my
ORDER BY g.my DESC , p.Name2 ASC