【问题标题】:T-SQL Sorting by year and monthT-SQL 按年和月排序
【发布时间】:2015-12-17 23:17:00
【问题描述】:

我想根据日期 yyyy,mm 按日期排序。 我首先尝试使用 VARCHARS:

GROUP BY (YEAR(join_date) AS VARCHAR(4)) + '-' + CAST(MONTH(join_date) AS VARCHAR(2))

但是将它们转换为 varchar 意味着我的排序就像 2014.1 - 2014.11 - 2014.12 - 2014.2 我怎样才能按年和月的顺序正确排序?

SELECT Year(join_date) + MONTH(join_date) AS Date, COUNT(*) AS Count
FROM X
WHERE mtype ='A' AND (join_date BETWEEN DATEADD(year, -5, GETDATE()) AND GETDATE())
GROUP BY YEAR(join_date) + MONTH(join_date)
ORDER BY Date ASC

【问题讨论】:

    标签: sql sql-server tsql sorting


    【解决方案1】:

    您只是不需要将它们转换为 varchar,YEARMONTH 返回整数:

    SELECT Year(join_date) As JoinedYear, MONTH(join_date) AS JoinedMonth, COUNT(*) AS Count
    FROM X
    WHERE mtype ='A' AND (join_date BETWEEN DATEADD(year, -5, GETDATE()) AND GETDATE())
    GROUP BY YEAR(join_date), MONTH(join_date)
    ORDER BY YEAR(join_date) ASC, MONTH(join_date) ASC
    

    【讨论】:

    • 这让我“在 ORDER BY 子句中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。”这不是简单地将 2014.02 添加为 2016 吗?
    • @user5350968:我已经编辑了我的答案。您不应按Year+Month 分组,而应按Year,Month 分组
    • 这个错误是我的错误,但它确实将年份和月份加在一起,使 2014 年 2 月成为 2016 年的数字
    • @user5350968:您正在选择year + month,这是没有意义的,您不想添加它们。选择两列
    • 我想要在一个字段中使用年+月的原因是因为我正在处理一个图表的结果集,该图表将一列作为 x 并计为 y 数据,但还是谢谢你
    猜你喜欢
    • 2018-06-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    相关资源
    最近更新 更多