SQL查询使用CASE将数据分组为时间间隔

时间:2015-03-24 21:44:23

标签: sql

我对SQL完全不熟悉,并且正在尝试进行一些正在训练我的后端的在职训练练习。

我正在尝试编写一个查询,该查询将查看包含称为CC_To_Dep的分钟的表列,并针对某些桶测量该列:0-30分钟,30-60分钟,1-2小时,超过2小时,然后将数据返回到看起来像这样

Case Count Time 698,523 0-30 Mins 235,888 30-60 Mins 50,853 1-2 Hrs 2,855 Over 2 Hrs

这就是我正在使用的内容,它使用上面的时间段标记每条记录,但它并没有将它们组合在一起。我在最后尝试了一个GROUP BY子句但是然后整个事情都出错了。

SELECT 
(CC_To_Dep) as CaseCount
,CASE 
WHEN(CC_To_Dep)< 30 THEN '0-30Mins'
WHEN(CC_To_Dep)>= 30 AND (CC_To_Dep)<= 60 THEN '30-60Mins'
WHEN(CC_To_Dep)> 60 AND (CC_To_Dep)<= 120 THEN '1-2Hrs'
ELSE 'Over 2 Hrs'
END as Time
FROM Table1
WHERE YEAR(Arr_date)=2013

感谢任何帮助。我一直在寻找答案,但我很难在其他示例中阅读代码,然后将其应用到我的情况中。我有一天会到那里,但今天不是那一天。

1 个答案:

答案 0 :(得分:1)

SELECT 
CASE 
WHEN(CC_To_Dep)< 30 THEN '0-30Mins'
WHEN(CC_To_Dep)>= 30 AND (CC_To_Dep)<= 60 THEN '30-60Mins'
WHEN(CC_To_Dep)> 60 AND (CC_To_Dep)<= 120 THEN '1-2Hrs'
ELSE 'Over 2 Hrs'
END as Time
, count(*) as caseCount
FROM Table1
WHERE YEAR(Arr_date)=2013
group by 
CASE 
WHEN(CC_To_Dep)< 30 THEN '0-30Mins'
WHEN(CC_To_Dep)>= 30 AND (CC_To_Dep)<= 60 THEN '30-60Mins'
WHEN(CC_To_Dep)> 60 AND (CC_To_Dep)<= 120 THEN '1-2Hrs'
ELSE 'Over 2 Hrs'
END