首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个SQL查询有关问题,请高手入场

2012-12-30 
一个SQL查询问题,请高手入场PRODPRODQTYOPRQTYDATEA01 100 A 52012-01-01A01 100 B 252012-01-02A01 100 C

一个SQL查询问题,请高手入场
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
A02 50 Aa 5     2012-02-01
A02 50 Ba 10    2012-02-02
A02 50 Ca 20    2012-02-03
A02 50 Da 16    2012-02-04
A02 50 Ea 15    2012-02-05
A02 50 fa 10    2012-02-06
A02 50 ga 12    2012-02-07
...............


按DATE升序排列,汇总QTY,当汇总数大于或等于前面的PRODQTY(100)的话
那么就取出来那一条记录(当然PROD与PRODQTY的记录都是一致)

如:
PROD  PRODQTY   OPR    QTY   DATE
 A01 100 E 10    2012-01-05
 A02 50 Da 16    2012-02-04
...............
[解决办法]

if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (PROD nvarchar(6),PRODQTY int,OPR nvarchar(4),QTY int,DATE datetime)
insert into [TB]
select 'A01',100,'A',5,'2012-01-01' union all
select 'A01',100,'B',25,'2012-01-02' union all
select 'A01',100,'C',35,'2012-01-03' union all
select 'A01',100,'D',15,'2012-01-04' union all
select 'A01',100,'E',15,'2012-01-05' union all
select 'A01',100,'f',10,'2012-01-06' union all
select 'A01',100,'g',12,'2012-01-07' union all
select 'A02',50,'Aa',5,'2012-02-01' union all
select 'A02',50,'Ba',10,'2012-02-02' union all
select 'A02',50,'Ca',20,'2012-02-03' union all
select 'A02',50,'Da',16,'2012-02-04' union all
select 'A02',50,'Ea',15,'2012-02-05' union all
select 'A02',50,'fa',10,'2012-02-06' union all
select 'A02',50,'ga',12,'2012-02-07'

select * from [TB]

SELECT  TB.*
FROM    TB
        INNER JOIN ( SELECT TOP 1
                            A.date ,
                            A.prodqty ,
                            A.PROD ,
                            SUM(B.QTY) AS qty
                     FROM   dbo.TB A
                            INNER JOIN TB B ON A.date >= B.date


                     GROUP BY A.date ,
                            A.prodqty ,
                            A.PROD
                     HAVING SUM(B.QTY) <= A.prodqty
                     ORDER BY a.date DESC
                   ) T ON T.date = TB.date
                          AND T.prod = TB.prod

/*
A01100E152012-01-05 00:00:00.000*/

热点排行