我有一个按指定日期返回记录的sql查询,我想做的是按1小时间隔对它们进行分组,我的查询返回一个日期和间隔。间隔值类似于8:00,8:30,9:00,9:30,10:00,因为您可以看到间隔产生了5个值我想要做的是按照8:00-9:00,9:00-10:00对它们进行分组
我设计了一个查询:
SELECT DATEPART(HOUR,VC.DATE+ VC.INTERVAL) AS DATE
,DATEPART(HOUR,VC.INTERVAL) AS INTERVAL
FROM VMUK_Q1R_IB_CONSOLIDATED VC但问题是,它显示为8,8,9,9,10,我该如何实现呢?
发布于 2013-11-08 03:33:28
您需要的是创建一组每小时值,并根据值的小时部分重新加入该值。这将确保表示缺少的“bucket”。下面的CTE将为您提供24小时的查找-您也可以使用静态查找表做同样的事情。
with ranges
as
(
select 0 as value
union all
select r.value+ 1 from ranges r where r.value <= 24
)
select
r.value start
from ranges r发布于 2013-11-07 22:22:21
您可以通过计算或格式化来修复此问题。我认为在这个例子中格式化会更简单。试试这个:
SELECT Convert(VarChar(20), DATEPART(HOUR,VC.INTERVAL)) + ':00' AS DATE
,DATEPART(HOUR,VC.INTERVAL) AS INTERVAL
FROM VMUK_Q1R_IB_CONSOLIDATED VC如果你想要显示完整的日期+时间,向下舍入,试试这个:
SELECT Convert(VarChar(20), VC.Date, 101) + Convert(VarChar(20), DATEPART(HOUR,VC.INTERVAL)) + ':00' AS DATE
,DATEPART(HOUR,VC.INTERVAL) AS INTERVAL
FROM VMUK_Q1R_IB_CONSOLIDATED VC如果你也想要时间范围,试试这个:
SELECT Convert(VarChar(20), VC.Date, 101) + Convert(VarChar(20), DATEPART(HOUR,VC.INTERVAL)) + ':00' AS DATE,
,DatePart(HOUR,VC.INTERVAL)) + ':00 - ' + DatePart(HOUR, DateAdd(HOUR, VC.INTERVAL, 1)) + ':00' AS TimeRange
,DATEPART(HOUR,VC.INTERVAL) AS INTERVAL
FROM VMUK_Q1R_IB_CONSOLIDATED VC发布于 2013-11-08 10:35:15
SELECT
DATEPART(HOUR,VC.DATE+ VC.INTERVAL) AS DATE,
case DATEPART(HOUR,VC.INTERVAL)
when 0 then '00:00-00:59'
when 1 then '01:00-01:59'
.
.
etc.
.
.
when 22 then '22:00-22:59'
when 23 then '23:00-23:59'
end AS INTERVAL
FROM VMUK_Q1R_IB_CONSOLIDATED VChttps://stackoverflow.com/questions/19837984
复制相似问题