日期:2014-05-17  浏览次数:20422 次

一个查询问题,立即解决,立即给分
PROD  PRODQTY   OPR    QTY   DATE
A01 100 A 5    2012-01-01
A01 100 B 25   2012-01-02
A01 100 C 35   2012-01-03
A01 100 D 15   2012-01-04
A01 100 E 15   2012-01-05
A01 100 f 10   2012-01-06
A01 100 g 12   2012-01-07


按DATE升序排列,汇总QTY,当汇总数大于或等于前面的PRODQTY(100)的话
那么就取出来那一条记录(按DATE升序,只取符合条件日期最早的那一条记录)

如:
PROD  PRODQTY   OPR    QTY   DATE
A01 100 f 10   2012-01-06
------解决方案--------------------


with t as 
(
select 'A01' as prod,100 as prodqty,'A' opr, 5 qty,'2012/1/1' [date] union all
select 'A01' as prod,100 as prodqty,'B' opr, 25 qty,'2012/2/1' [date] union all
select 'A01' as prod,100 as prodqty,'C' opr, 35 qty,'2012/3/1' [date] union all
select 'A01' as prod,100 as prodqty,'D' opr, 15 qty,'2012/4/1' [date] union all
select 'A01' as prod,100 as prodqty,'E' opr, 15 qty,'2012/5/1' [date] union all
select 'A01' as prod,100 as prodqty,'F' opr, 10 qty,'2012/6/1' [date] union all
select 'A01' as prod,100 as prodqty,'G' opr, 12 qty,'2012/7/1' [date] 
)

select top 1 b.*
from t as b
where (select sum(qty) from t as a where a.date<=b.date)>prodqty
order by [date]