1

我有按指定日期返回记录的 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 我如何实现这个?

4

3 回答 3

1

您需要创建一组小时值,并根据您的值的小时部分重新加入它。这将确保代表丢失的“桶”。以下 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-07T19:33:28.150 回答
0

您可以通过计算或格式化来解决此问题。我认为这个例子的格式化会更简单。尝试这个:

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-07T14:22:21.197 回答
0
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 VC
于 2013-11-08T02:35:14.650 回答