按小时分组排除数据较少的最后一小时

时间:2017-05-31 09:14:17

标签: sql-server

我有一个表,其中列开始时间日期时间可用于不同日期和时间,持续时间为15分钟,如

2017-05-31 13:00:00
2017-05-31 13:15:00
2017-05-31 13:30:00
2017-05-31 13:45:00
2017-05-31 14:00:00
2017-05-31 14:15:00
2017-05-31 14:30:00
2017-05-31 14:45:00
2017-05-31 15:00:00
2017-05-31 15:15:00

现在我想按小时获取数据和分组,但直到最后一小时才能获得所有分钟,例如2017-05-31 14:45:00。

缺失数据之间的

并不重要,只有最后一小时数据才有意义。

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以使用以下查询

DECLARE @SampleData AS TABLE
(
    DateValue datetime
)

INSERT INTO @SampleData
(
    DateValue
)
VALUES
('2017-05-31 13:00:00'),
('2017-05-31 13:15:00'),
('2017-05-31 13:30:00'),
('2017-05-31 13:45:00'),
('2017-05-31 14:00:00'),
('2017-05-31 14:15:00'),
('2017-05-31 14:30:00'),
('2017-05-31 14:45:00'),
('2017-05-31 15:00:00'),
('2017-05-31 15:15:00')

;WITH temp AS
(
    SELECT  *, 
          count(*) OVER(PARTITION BY CAST(sd.DateValue as date),datepart(hour,sd.DateValue) ) AS CountHour
    FROM @SampleData sd
)
SELECT  TOP 1 
       t.DateValue
FROM temp t
WHERE t.CountHour = 4 -- all mins are avaiable
ORDER BY t.DateValue DESC

返回

DateValue
2017-05-31 14:45:00.000

答案 1 :(得分:0)

据我所知,您只想看那小时是否有4条记录。您可以按小时分组并使用。

<div ng-controller={{ controller }}>
</div>

答案 2 :(得分:-1)

您可以先复制和/或更改表格,然后将日期时间的子字符串设置为小时。

或者使用CASE。虽然非常详细,但这个例子不会在多天内发挥作用。

GROUP BY
CASE
    WHEN datetime LIKE '% 13%' THEN '13'
    WHEN datetime LIKE '% 14%' THEN '14'
    ...
END