我有这样的组织一组电源供电:选择一个/几夭多个行每个组
op_type | time_stamp | product | in | out
----------------------------------------------------
01 | 08:00:00 | p1 | 50 | 0
02 | 08:01:00 | p1 | 0 | 10
02 | 08:02:00 | p1 | 0 | 35
03 | 08:03:00 | p1 | 0 | 5
01 | 08:04:00 | p1 | 60 | 0
02 | 08:09:00 | p1 | 0 | 15
01 | 08:10:00 | p1 | 30 | 0
02 | 08:11:00 | p1 | 0 | 20
01 | 08:00:00 | p2 | 100 | 0
02 | 08:01:00 | p2 | 0 | 20
02 | 08:02:00 | p2 | 0 | 45
03 | 08:03:00 | p2 | 0 | 15
01 | 08:03:10 | p2 | 60 | 0
01 | 08:04:00 | p2 | 5 | 0
02 | 08:09:00 | p2 | 0 | 30
01 | 08:10:00 | p2 | 30 | 0
02 | 08:11:00 | p2 | 0 | 10
我想是选择列表巫婆SUM(in) group by product
将覆盖SUM(out) group by product
从给定时间开始 EX:为time_stamp>'08:05:00'
我:
SUM(out) for p1=35
如此之 和SUM(out) for p2=40
所以列表我想获得将
op_type | time_stamp | product | in | out
----------------------------------------------------
01 | 08:04:00 | p1 | 60 | 0
02 | 08:09:00 | p1 | 0 | 15
01 | 08:10:00 | p1 | 30 | 0
02 | 08:11:00 | p1 | 0 | 20
01 | 08:03:10 | p2 | 60 | 0
01 | 08:04:00 | p2 | 5 | 0
02 | 08:09:00 | p2 | 0 | 30
01 | 08:10:00 | p2 | 30 | 0
02 | 08:11:00 | p2 | 0 | 10
我所做的是我添加拖列到结果女巫一个有out
总和与其他有in
SELECT B.*,C.sum_out FROM (SELECT A.*,SUM(in) OVER (PARTITION BY product ORDER BY time_stamp desc) AS sum_in FROM table A) B
LEFT OUTER JOIN
SELECT C.* FROM (SELECT product,SUM(out) AS sum_out from table GROUP BY product WHERE time_stamp>'08:05:00') C
ON B.product=C.product
,所以我得到的累积和:
op_type | time_stamp | product | in | out | sum_in | sum_out
-------------------------------------------------------------------------
01 | 08:00:00 | p1 | 50 | 0 | 140 | 35
02 | 08:01:00 | p1 | 0 | 10 | 90 | 35
02 | 08:02:00 | p1 | 0 | 35 | 90 | 35
03 | 08:03:00 | p1 | 0 | 5 | 90 | 35
01 | 08:04:00 | p1 | 60 | 0 | 90 | 35
02 | 08:09:00 | p1 | 0 | 15 | 30 | 35
01 | 08:10:00 | p1 | 30 | 0 | 30 | 35
02 | 08:11:00 | p1 | 0 | 20 | 0 | 35
01 | 08:00:00 | p2 | 100 | 0 | 195 | 40
02 | 08:01:00 | p2 | 0 | 20 | 95 | 40
02 | 08:02:00 | p2 | 0 | 45 | 95 | 40
03 | 08:03:00 | p2 | 0 | 15 | 95 | 40
01 | 08:03:10 | p2 | 60 | 0 | 95 | 40
01 | 08:04:00 | p2 | 5 | 0 | 35 | 40
02 | 08:09:00 | p2 | 0 | 30 | 30 | 40
01 | 08:10:00 | p2 | 30 | 0 | 30 | 40
02 | 08:11:00 | p2 | 0 | 10 | 0 | 40
如果我加上一句WHERE B.sum_in<=C.sum_out
我将能够得到
op_type | time_stamp | product | in | out | sum_in | sum_out
-------------------------------------------------------------------------
02 | 08:09:00 | p1 | 0 | 15 | 30 | 35
01 | 08:10:00 | p1 | 30 | 0 | 30 | 35
02 | 08:11:00 | p1 | 0 | 20 | 0 | 35
01 | 08:04:00 | p2 | 5 | 0 | 35 | 40
02 | 08:09:00 | p2 | 0 | 30 | 30 | 40
01 | 08:10:00 | p2 | 30 | 0 | 30 | 40
02 | 08:11:00 | p2 | 0 | 10 | 0 | 40
所以我需要为每个产品再增加一行。
任何想法如何执行此?? ?? PS:我正在使用SQL SERVER 2012.
是什么时间的显著'08:05:00'?它是查询的输入吗? – Squirrel
是的,不要担心时间格式这只是一个虚拟数据 – Billydan
什么是你想要的最终输出 – mansi