我需要按 11:00 到第二天 10:00 的时间段选择值的总和,并按 ID 分组。
这是我的表 1:
date value id
"2017-03-29 11:00:00" "453" "id1"
"2017-03-29 12:00:00" "000" "id1"
"2017-03-29 13:00:00" "234" "id1"
"2017-03-29 14:00:00" "000" "id1"
"2017-03-29 15:00:00" "000" "id1"
"2017-03-29 16:00:00" "222" "id1"
"2017-03-29 17:00:00" "000" "id1"
"2017-03-29 18:00:00" "000" "id1"
"2017-03-29 19:00:00" "000" "id1"
"2017-03-29 20:00:00" "000" "id1"
"2017-03-29 21:00:00" "000" "id1"
"2017-03-29 22:00:00" "000" "id1"
"2017-03-29 23:00:00" "123" "id1"
"2017-03-30 00:00:00" "000" "id1"
"2017-03-30 01:00:00" "000" "id1"
"2017-03-30 02:00:00" "000" "id1"
"2017-03-30 03:00:00" "000" "id1"
"2017-03-30 04:00:00" "000" "id1"
"2017-03-30 05:00:00" "000" "id1"
"2017-03-30 07:00:00" "000" "id1"
"2017-03-30 08:00:00" "000" "id1"
"2017-03-30 09:00:00" "000" "id1"
"2017-03-30 10:00:00" "333" "id1"
"2017-03-30 11:00:00" "000" "id1"
"2017-03-30 12:00:00" "123" "id1"
"2017-03-30 13:00:00" "000" "id1"
"2017-03-30 14:00:00" "000" "id1"
"2017-03-30 15:00:00" "000" "id1"
"2017-03-30 16:00:00" "000" "id1"
"2017-03-30 18:00:00" "000" "id1"
"2017-03-30 19:00:00" "000" "id1"
"2017-03-30 20:00:00" "000" "id1"
"2017-03-30 21:00:00" "000" "id1"
"2017-03-30 22:00:00" "000" "id1"
"2017-03-30 23:00:00" "000" "id1"
"2017-03-31 00:00:00" "000" "id1"
"2017-03-31 01:00:00" "000" "id1"
"2017-03-31 02:00:00" "000" "id1"
"2017-03-31 03:00:00" "000" "id1"
"2017-03-31 04:00:00" "000" "id1"
"2017-03-31 05:00:00" "000" "id1"
"2017-03-31 06:00:00" "000" "id1"
"2017-03-31 07:00:00" "000" "id1"
"2017-03-31 08:00:00" "000" "id1"
"2017-03-31 09:00:00" "000" "id1"
"2017-03-29 12:00:00" "756" "id2"
"2017-03-29 13:00:00" "701" "id2"
"2017-03-29 14:00:00" "758" "id2"
"2017-03-29 15:00:00" "867" "id2"
"2017-03-29 16:00:00" "924" "id2"
"2017-03-29 17:00:00" "871" "id2"
"2017-03-29 18:00:00" "817" "id2"
"2017-03-29 19:00:00" "109" "id2"
"2017-03-29 20:00:00" "131" "id2"
"2017-03-29 21:00:00" "126" "id2"
"2017-03-29 22:00:00" "120" "id2"
"2017-03-29 23:00:00" "120" "id2"
"2017-03-30 00:00:00" "930" "id2"
"2017-03-30 01:00:00" "108" "id2"
"2017-03-30 09:00:00" "867" "id2"
"2017-03-30 10:00:00" "808" "id2"
"2017-03-30 11:00:00" "756" "id2"
"2017-03-30 12:00:00" "758" "id2"
"2017-03-30 13:00:00" "866" "id2"
"2017-03-30 14:00:00" "981" "id2"
"2017-03-30 15:00:00" "981" "id2"
"2017-03-30 16:00:00" "872" "id2"
"2017-03-30 17:00:00" "928" "id2"
"2017-03-30 18:00:00" "109" "id2"
"2017-03-30 19:00:00" "115" "id2"
"2017-03-30 20:00:00" "121" "id2"
"2017-03-30 21:00:00" "131" "id2"
"2017-03-30 22:00:00" "148" "id2"
"2017-03-30 23:00:00" "132" "id2"
"2017-03-31 00:00:00" "115" "id2"
"2017-03-31 01:00:00" "120" "id2"
"2017-03-31 02:00:00" "137" "id2"
"2017-03-31 03:00:00" "137" "id2"
"2017-03-31 04:00:00" "132" "id2"
"2017-03-31 05:00:00" "126" "id2"
"2017-03-31 06:00:00" "126" "id2"
"2017-03-31 07:00:00" "104" "id2"
"2017-03-31 08:00:00" "874" "id2"
"2017-03-31 09:00:00" "651" "id2"
"2017-03-31 10:00:00" "540" "id2"
结果表应该是这样的:
date_period value_sum id
"2017-03-29 11:00:00 - 2017-03-30 10:00:00" 1365 "id1"
"2017-03-30 11:00:00 - 2017-03-31 10:00:00" 123 "id1"
"2017-03-29 11:00:00 - 2017-03-30 10:00:00" 9013 "id2"
"2017-03-30 11:00:00 - 2017-03-31 10:00:00" 9834 "id2"
Table1只是一个例子,真实的表有很多2015年到2017年的id和大日期,而不仅仅是2017-03-29到2017-03-31。我需要按 11:00 到第二天 10:00 的时间段选择所有值的总和,并按 id 分组。
Oracle 和 MSSQL 中应该有 2 个解决方案。
最佳答案
我认为以下查询将帮助您解决问题,如果您有任何其他问题,请告诉我
DECLARE @ProductTotals TABLE
(
Daytime Datetime,
ProductID int,
id nvarchar(50)
)
INSERT INTO @ProductTotals (Daytime,ProductID, id) values('2017-03-29 11:00:00',453,'id1')
INSERT INTO @ProductTotals (Daytime,ProductID, id) values('2017-04-30 12:00:00',568,'id1')
INSERT INTO @ProductTotals (Daytime,ProductID, id) values('2017-05-31 13:00:00',500,'id1')
INSERT INTO @ProductTotals (Daytime,ProductID, id) values('2017-03-29 11:00:00',586,'id2')
INSERT INTO @ProductTotals (Daytime,ProductID, id) values('2017-03-29 12:00:00',895,'id2')
INSERT INTO @ProductTotals (Daytime,ProductID, id) values('2017-03-29 13:00:00',452,'id2')
INSERT INTO @ProductTotals (Daytime,ProductID, id) values('2017-03-29 11:00:00',875,'id3')
INSERT INTO @ProductTotals (Daytime,ProductID, id) values('2017-03-29 12:00:00',586,'id3')
INSERT INTO @ProductTotals (Daytime,ProductID, id) values('2017-03-29 13:00:00',784,'id3')
SELECT sum(t.sumid) AS sumid,
T.id,
T.Duration from(
SELECT p.ProductID AS sumid,
p.id,
Duration = cast(DATEADD(DAY, DATEDIFF(DAY, 0, Daytime), '10:00:00') AS varchar)+' - ' + cast(DATEADD(DAY, DATEDIFF(DAY, -1, Daytime), '11:00:00') AS varchar)
FROM @ProductTotals p
GROUP BY p.id,
p.Daytime,
p.ProductID
HAVING Daytime > DATEADD(DAY, DATEDIFF(DAY, 0, Daytime), '10:00:00')
AND Daytime < DATEADD(DAY, DATEDIFF(DAY, -1, Daytime), '11:00:00')
)T
group by T.id,t.Duration
OutPut is Given below
568 id1 Apr 30 2017 10:00AM - May 1 2017 11:00AM
453 id1 Mar 29 2017 10:00AM - Mar 30 2017 11:00AM
1933 id2 Mar 29 2017 10:00AM - Mar 30 2017 11:00AM
2245 id3 Mar 29 2017 10:00AM - Mar 30 2017 11:00AM
500 id1 May 31 2017 10:00AM - Jun 1 2017 11:00AM
关于sql - 选择按 id 分组的日期段的列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44280362/