代码之家  ›  专栏  ›  技术社区  ›  user3127554

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

  •  0
  • user3127554  · 技术社区  · 7 年前

    我有以下疑问:

    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 回复  |  直到 7 年前
        1
  •  2
  •   Giorgos Betsos    7 年前

    这样的做法应该管用:

    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