n小时可以简单组合吗? 我发现了几分钟的相关问题,但我几个小时都无法做到。
我需要将一些数据分组8小时并补偿。
所以前8个小时不是00:00 - 08:00而是22:00(昨天) - 06:00(今天)。
我按小时将其分组并卡住了。 我怎样才能做到这一点? 任何建议都表示赞赏。
答案 0 :(得分:2)
您可以使用DATEADD / DATEDIFF技巧按8小时的间隔进行分组。
您需要添加偏移量,在本例中为
示例脚本
DECLARE @foo table (foo smalldatetime, bar int);
INSERT @foo (foo, bar)
VALUES
('2017-10-11 21:00', 1),
('2017-10-11 22:00', 2),
('2017-10-11 23:00', 3),
('2017-10-12 01:00', 4),
('2017-10-12 03:00', 5),
('2017-10-12 05:00', 6),
('2017-10-12 07:00', 7),
('2017-10-12 08:00', 8);
SELECT
SUM(bar),
DATEADD(hh, ((DATEDIFF(hh, 0, foo)+2)/8*8)-2, 0)
FROM
@foo
GROUP BY
DATEADD(hh, ((DATEDIFF(hh, 0, foo)+2)/8*8)-2, 0);
答案 1 :(得分:0)
我不知道数据,输入和输出(你应该提供),但这里有一些通用的方法:
假设我们有简单的表(名为SimpleTable
),有2列:销售产品的时间和销售数量:
SellingTime | Quantity
2013-01-02 08:43:22.011 | 4
2013-02-12 12:32:12.001 | 14
etc.
现在,我们将为每个日期添加订购号:1表示22-6之间的时间等。
SELECT SellingTime, Qunatity,
CASE WHEN DATEPART(hh, SellingTime) >= 22 AND DATEPART(hh, SellingTime) < 6 THEN 1
WHEN DATEPART(hh, SellingTime) >= 6 AND DATEPART(hh, SellingTime) < 14 THEN 2
ELSE 3 END AS NumberOfOrder
FROM SimpleTable
现在,您需要做的就是按NumberOfOrder
分组并加Quantity
:
SELECT NumberOfOrder, SUM(Quantity) FROM (*)
代替*
您放置第一个查询。