它可能简单的小组由n小时? 我发现了几分钟的相关问题,但不能用几个小时来完成。T-Sql小组由n小时
我需要将一些数据按偏移量分组8小时。
因此,前8小时不是00:00 - 08:00,而是22:00(昨天) - 06:00(今天)。
我按小时分组,并卡住了。 我该怎么做? 任何意见表示赞赏。
它可能简单的小组由n小时? 我发现了几分钟的相关问题,但不能用几个小时来完成。T-Sql小组由n小时
我需要将一些数据按偏移量分组8小时。
因此,前8小时不是00:00 - 08:00,而是22:00(昨天) - 06:00(今天)。
我按小时分组,并卡住了。 我该怎么做? 任何意见表示赞赏。
您可以使用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);
我不知道没有数据,输入输出也没有(你应该提供),但这里的一些基本方法:
假设我们有简单的表(名为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
现在,所有你需要做的就是按和求和Quantity
:
SELECT NumberOfOrder, SUM(Quantity) FROM (*)
其中代替*
你把第一个查询。
非常感谢您的帮助 – Bogu