我有一个表,其中列开始时间日期时间可用于不同日期和时间,持续时间为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。
缺失数据之间的并不重要,只有最后一小时数据才有意义。
答案 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