读书人

进货单价最近2次价格比对

发布时间: 2012-05-09 12:13:59 作者: rapoo

求助:进货单价,最近2次价格比对
在日常工作,常常会有这样的例子:

SQL code
create table HJ (单别 CHAR(4),单号 CHAR(11),序号 CHAR(4),料号 CHAR(20),日期 CHAR(8),单价 NUMERIC(16,4) )INSERT INTO HJ VALUES('A1','20120100001','0001','钢笔','20120101','100')INSERT INTO HJ VALUES('A1','20120100002','0001','铅笔','20120101','100')INSERT INTO HJ VALUES('A1','20120100003','0001','圆珠笔','20120101','100')INSERT INTO HJ VALUES('A1','20120200001','0001','钢笔','20120201','90')INSERT INTO HJ VALUES('A1','20120200002','0001','铅笔','20120201','96')INSERT INTO HJ VALUES('A1','20120200003','0001','圆珠笔','20120201','106')INSERT INTO HJ VALUES('A1','20120300001','0001','钢笔','20120301','91')INSERT INTO HJ VALUES('A1','20120300002','0001','铅笔','20120301','99')INSERT INTO HJ VALUES('A1','20120300003','0001','圆珠笔','20120301','101')SELECT * FROM HJ

--
A1 201201000010001钢笔 20120101100.0000
A1 201201000020001铅笔 20120101100.0000
A1 201201000030001圆珠笔 20120101100.0000
A1 201202000010001钢笔 2012020190.0000
A1 201202000020001铅笔 2012020196.0000
A1 201202000030001圆珠笔 20120201106.0000
A1 201203000010001钢笔 2012030191.0000
A1 201203000020001铅笔 2012030199.0000
A1 201203000030001圆珠笔 20120301101.0000
--现在想通过一条查询语句,查询出同一个料号最近2次的进货价格,然后再比对差异。用TOP不行,因为TOP是取全部的排序值,用排序函数ROW-NUMBER也不行,因为也是全部的。这个例子最困难的地方在于,是取每种料号的最近2次价格。在ERP浩瀚的数据当中,如何达到这样的效果?
--目前我的思路是 先MAX(日期),再用剩下的日期再MAX(日期),似乎太复杂。。。

高手们,支个招!


[解决办法]
SQL code
create table HJ (单别 CHAR(4),单号 CHAR(11),序号 CHAR(4),料号 CHAR(20),日期 CHAR(8),单价 NUMERIC(16,4) )INSERT INTO HJ VALUES('A1','20120100001','0001','钢笔','20120101','100')INSERT INTO HJ VALUES('A1','20120100002','0001','铅笔','20120101','100')INSERT INTO HJ VALUES('A1','20120100003','0001','圆珠笔','20120101','100')INSERT INTO HJ VALUES('A1','20120200001','0001','钢笔','20120201','90')INSERT INTO HJ VALUES('A1','20120200002','0001','铅笔','20120201','96')INSERT INTO HJ VALUES('A1','20120200003','0001','圆珠笔','20120201','106')INSERT INTO HJ VALUES('A1','20120300001','0001','钢笔','20120301','91')INSERT INTO HJ VALUES('A1','20120300002','0001','铅笔','20120301','99')INSERT INTO HJ VALUES('A1','20120300003','0001','圆珠笔','20120301','101')select 单别,单号,序号,料号 ,日期,单价 from(select px=ROW_NUMBER()over(partition by 料号 order by 日期 desc),* from HJ)twhere px<=2/*单别    单号    序号    料号    日期    单价A1      20120300001    0001    钢笔                    20120301    91.0000A1      20120200001    0001    钢笔                    20120201    90.0000A1      20120300002    0001    铅笔                    20120301    99.0000A1      20120200002    0001    铅笔                    20120201    96.0000A1      20120300003    0001    圆珠笔                  20120301    101.0000A1      20120200003    0001    圆珠笔                  20120201    106.0000*/row_number是可以的
[解决办法]
[Quote=引用:]
楼主说的同日期多单问题,看看这样修改下如何?
SQL code
select 单别,单号,序号,料号 ,日期,单价 from(select px=ROW_NUMBER()over(partition by 料号 order by 日期 desc),* from HJ)t[/Quote]++楼主说的同日期多单问题,看看这样修改下如何?[code=SQL]select 单别,单号,序号,料号 ,日期,单价 from(select px=ROW_NUMBER()over(partition by 料号 order by 单号 desc),* from HJ)twhere px<=2
[解决办法]
用ROW_NUMBER的1楼写了,给你写一个用TOP的
SQL code
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'HJ')BEGIN    DROP TABLE HJENDGOcreate table HJ (单别 CHAR(4),单号 CHAR(11),序号 CHAR(4),料号 CHAR(20),日期 CHAR(8),单价 NUMERIC(16,4) )INSERT INTO HJ VALUES('A1','20120100001','0001','钢笔','20120101','100')INSERT INTO HJ VALUES('A1','20120100002','0001','铅笔','20120101','100')INSERT INTO HJ VALUES('A1','20120100003','0001','圆珠笔','20120101','100')INSERT INTO HJ VALUES('A1','20120200001','0001','钢笔','20120201','90')INSERT INTO HJ VALUES('A1','20120200002','0001','铅笔','20120201','96')INSERT INTO HJ VALUES('A1','20120200003','0001','圆珠笔','20120201','106')INSERT INTO HJ VALUES('A1','20120300001','0001','钢笔','20120301','91')INSERT INTO HJ VALUES('A1','20120300002','0001','铅笔','20120301','99')INSERT INTO HJ VALUES('A1','20120300003','0001','圆珠笔','20120301','101')--SELECT * FROM HJSELECT 单别,单号,序号,料号,日期,单价FROM HJ AS AWHERE 单号 IN (SELECT TOP 2 单号 FROM HJ WHERE 料号 = A.料号 ORDER BY 日期 DESC)ORDER BY 料号,日期 DESC单别    单号    序号    料号    日期    单价A1      20120300001    0001    钢笔                    20120301    91.0000A1      20120200001    0001    钢笔                    20120201    90.0000A1      20120300002    0001    铅笔                    20120301    99.0000A1      20120200002    0001    铅笔                    20120201    96.0000A1      20120300003    0001    圆珠笔                  20120301    101.0000A1      20120200003    0001    圆珠笔                  20120201    106.0000 

读书人网 >SQL Server

热点推荐