【问题标题】:count records based on group of interval(days) on date column根据日期列上的间隔(天)组计算记录
【发布时间】:2012-10-17 06:18:30
【问题描述】:

统计区间之间的数据,区间取决于记录的年龄

我有一个名为complaint 的表,其中有很多列带有ComplaintDate,我想显示记录数取决于间隔

以下间隔将用于分类记录:

  1. 10 天前的投诉数量。
  2. 10-20 天前的投诉数量。
  3. 20-30 天前的投诉数量。
  4. 超过 30 天的投诉数量。

我尝试过类似的方法

select SUM(CASE WHEN ComplaintDate BETWEEN DATEADD (dd,-10,getdate())AND   GETDATE()  THEN 1 ELSE 0 END) As '0-10',
       SUM(CASE WHEN ComplaintDate BETWEEN  DATEADD (dd,-20,getdate()) AND DATEADD (dd,-10,getdate()) THEN 1 ELSE 0 END) AS '10-20',
       SUM(CASE WHEN ComplaintDate BETWEEN DATEADD (dd,-30,getdate()) AND DATEADD (dd,-20,getdate()) THEN 1 ELSE 0 END) AS '20-30'       
 FROM Complaint 

我也希望包含在 0-10 天间隔内的那一天不应计入 10-20 或 20-30 天间隔内,其他其他间隔也应如此。

【问题讨论】:

  • 我不明白,但以下部分的代码格式在我的浏览器上不起作用。抱歉你之前编辑过,但我必须编辑一些东西,现在它的格式又不好
  • 我已经修复了格式(它不喜欢句子“我已经尝试过...”的缩进空间)
  • ComplaintDate 只是日期,还是日期和时间?您尝试过的有什么问题?
  • 它的日期时间列,我在想,我可以按间隔使用分组,然后将行转为列,而不是像我所做的那样制作这些列
  • 您上面的查询有什么问题?

标签: sql sql-server sql-server-2008 date


【解决方案1】:
select 
SUM(CASE WHEN ComplaintDate > DATEADD (dd,-10,getdate()) AND   ComplaintDate <= GETDATE()  THEN 1 ELSE 0 END) As '0-10',

SUM(CASE WHEN ComplaintDate > DATEADD (dd,-20,getdate()) AND ComplaintDate<=DATEADD (dd,-10,getdate()) THEN 1 ELSE 0 END) AS '10-20',

SUM(CASE WHEN ComplaintDate > DATEADD (dd,-30,getdate()) AND ComplaintDate <=DATEADD (dd,-20,getdate()) THEN 1 ELSE 0 END) AS '20-30'    

FROM Complaint 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2012-03-26
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多