【问题标题】:Count number of rows within each month of a datetime, group by year month计算日期时间每个月内的行数,按年月分组
【发布时间】:2013-11-28 20:15:58
【问题描述】:

我无法让存储过程为我提供这种类型的输出:

+-----------+------------------+
|月 |没有修改 |
+-----------+------+
| 2008 年 1 月 | 5 |
| 2008 年 11 月 | 6 |
| 2010 年 2 月 | 20 |
| 2013 年 7 月 | 7 |
+-----------+--------------------+

到目前为止,我设法让输出看起来像这样,但我还没有设法让输出按年排序,然后按月排序 - 它是按字母顺序排列的。这是我目前所拥有的:

SELECT convert(varchar(4), YEAR(LastModifedDate)) + ' ' + convert(varchar(3),datename(month, LastModifedDate)) as Dates,
    count(*) as Number

FROM aims.Modification

WHERE CompanyID = @companyID 
    AND LastModifedDate >= DATEADD(month, @numberOfMonths * -1, GETDATE())

GROUP BY convert(varchar(4), YEAR(LastModifedDate)) + ' ' + convert(varchar(3),datename(month, LastModifedDate))

我确实在日期时间字段上尝试了 ORDER BY,但得到了:

Column "aims.Modification.LastModifedDate" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.

在日期时间转换/选择/分组到字符串时也很混乱。那里的任何建议也会非常有帮助!

提前致谢!

【问题讨论】:

  • 如果将结果输出到网页或类似的东西,请在查询中添加另一个字符串,以 yyyymm 格式表示日期。按该字段排序,不要在您的应用程序中显示它。

标签: sql sql-server datetime count group-by


【解决方案1】:

使用它来将你的 varchar 转换为 datetime

 SELECT CONVERT(Datetime,'Jan  2008 ')  

然后根据 datetime desc 对列进行排序。 抱歉简短且未完成的答案,希望对您有所帮助。

【讨论】:

    【解决方案2】:
    SELECT YEAR(LastModifedDate), MONTH(month) as Dates, count(*) as Number
    FROM aims.Modification
    WHERE CompanyID = @companyID 
        AND LastModifedDate >= DATEADD(month, @numberOfMonths * -1, GETDATE())
    GROUP BY YEAR(LastModifedDate), MONTH(LastModifiedDate)
    ORDER BY YEAR(LastModifedDate), MONTH(LastModifiedDate)
    

    保持简单,并在您的 C# 代码或报告中进行连接...

    【讨论】:

      【解决方案3】:

      应该这样做:

      SELECT  CONVERT(VARCHAR(4),YEAR(LastModifedDate)) + ' ' + 
              CONVERT(VARCHAR(3),DATENAME(MONTH,LastModifedDate)) AS Dates,
              COUNT(*) as Number
      FROM aims.Modification
      WHERE CompanyID = @companyID 
          AND LastModifedDate >= DATEADD(MONTH,@numberOfMonths * -1,GETDATE())
      GROUP BY CONVERT(VARCHAR(4),YEAR(LastModifedDate)) + ' ' + 
               CONVERT(VARCHAR(3),DATENAME(MONTH,LastModifedDate)),
               CONVERT(VARCHAR(6),LastModifedDate,112)
      ORDER BY CONVERT(VARCHAR(6),LastModifedDate,112)
      

      【讨论】:

        猜你喜欢
        • 2017-04-14
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 2017-10-17
        • 2012-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多