它可能簡單的小組由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