求助:进货单价,最近2次价格比对
在日常工作,常常会有这样的例子:
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
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=引用:]
楼主说的同日期多单问题,看看这样修改下如何?
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的
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