create table 入库单表
(单号 varchar(20),日期 varchar(20))insert into 入库单表
select '1000081','20140101' union all
select '1000082','20150101' union all
select '600083','20150201' union all
select '3000001','20131201'create table 入库明细表
(单号 varchar(20),商品编号 varchar(10),品名 varchar(20),进价 decimal(5,1))insert into 入库明细表
select '1000081','1001','商品A',1.5 union all
select '1000081','1007','商品B',2.5 union all
select '1000082','1001','商品A',3.0 union all
select '600083','1007','商品B',3.5 union all
select '3000001','7725','商品C',100
select y.单号,y.日期,x.商品编号,x.品名,x.进价
from 入库明细表 x
inner join 入库单表 y on x.单号=y.单号
inner join
(select max(b.日期) '日期',a.商品编号,a.品名
from 入库明细表 a
inner join 入库单表 b on a.单号=b.单号
group by a.商品编号,a.品名) z on y.日期=z.日期 and x.商品编号=z.商品编号 and x.品名=z.品名
/*
单号 日期 商品编号 品名 进价
-------------------- -------------------- ---------- -------------------- ------------
1000082 20150101 1001 商品A 3.0
600083 20150201 1007 商品B 3.5
3000001 20131201 7725 商品C 100.0(3 row(s) affected)
*/
FROM 入库单表 T1
JOIN 入库明细表 T2 ON T1.单号=T2.单号
WHERE NOT EXISTS(
SELECT 1 FROM 入库单表 T3
JOIN 入库明细表 T4 ON T3.单号=T4.单号
WHERE T4.商品编号=T2.商品编号 AND T1.单号<>T3.单号
AND T1.日期<T3.日期)
(
Select y.单号,y.日期,x.商品编号, x.品名,x.进价, Row_Number() Over (Partition by x.商品编号 Order By y.日期 Desc) Seq
From 入库明细表 x Join 入库单表 y On x.单号=y.单号
)
Select 单号,日期,商品编号,品名,进价 From Cte Where Seq=1结果
单号 日期 商品编号 品名 进价
-------------------- -------------------- ---------- -------------------- ---------------------------------------
1000082 20150101 1001 商品A 3.0
600083 20150201 1007 商品B 3.5
3000001 20131201 7725 商品C 100.0(3 行受影响)