日期 单号 客户 货号 颜色 单位 数量 单价 金额
2007-9-23 0008265 李四 004 大白 kg 12.40 6.95 86.18
2007-9-24 0008266 张三 005 大白 kg 124.45 14.50 1,804.50
2007-10-18 0014574 张三 005 大白 kg 70.15 14.50 1,017.00
2007-8-14 0000580 张三 006 大白 kg 41.70 15.00 625.50
2007-6-30 0004336 张三 007 浅灰 kg 6.80 7.50 51.00
2007-9-6 0007710 张三 007 深兰 kg 55.60 14.00 778.25
2008-2-25 0129666 张三 007 深兰 kg 9.70 14.00 135.75
2008-2-29 0005777 张三 007 大白 kg 436.80 14.00 6,115.00
2008-3-12 0005209 张三 007 大黑 kg 123.30 14.00 1,726.00
2008-3-18 0007360 张三 007 米灰 kg 39.40 14.00 551.50
2007-9-5 0007617 张三 007 浅灰 kg 19.60 14.50 284.25
2007-10-12 0013846 张三 007 大黑 kg 103.10 14.50 1,494.75
2007-10-13 0013873 张三 007 大黑 kg 13.40 14.50 194.25
2007-10-24 0014468 张三 007 浅灰 kg 129.95 14.50 1,884.25
2007-10-28 0012665 张三 007 大黑 kg 1.55 14.50 22.25
2007-11-2 0013204 张三 007 大黑 kg 13.40 14.50 194.25
2007-11-2 0013208 张三 007 深兰 kg 18.30 14.50 265.25
2007-11-7 0014753 张三 007 大黑 kg 2.75 14.50 39.75
2007-11-16 0148965 张三 007 米灰 kg 13.75 14.50 199.25
2007-11-20 0146087 张三 007 深兰 kg 101.55 14.50 1,472.25
2007-12-7 1010757 张三 007 浅灰 kg 25.90 14.50 375.50
2007-12-19 1011090 张三 007 大白 kg 5.55 14.50 80.25
2008-3-10 0006642 张三 007 大黑 kg 13.50 14.50 195.75
2008-3-10 0006671 张三 007 大白 kg 47.25 14.50 685.00
2008-3-14 0006579 张三 007 大黑 kg 9.60 14.50 139.00
2008-3-18 0005635 张三 007 大黑 kg 1.95 14.50 28.25
2008-3-24 0125570 张三 007 大白 kg 23.40 14.50 339.25
2007-8-26 0006289 张三 007 大黑 kg 11.05 15.00 165.75
2007-12-15 1009958 张三 007 深兰 kg 1.70 15.00 25.50
2007-12-19 1011090 张三 007 大黑 kg 8.45 15.00 126.50
2008-1-13 0127785 张三 007 浅灰 kg 14.10 15.00 211.50
2008-1-20 0125140 张三 007 深兰 kg 30.10 15.00 451.50
2008-5-14 0116905 张三 007 浅灰 kg 3.80 15.00 14.25
2008-5-23 0118535 张三 007 深兰 kg 5.55 15.00 20.75
2008-6-14 0117950 张三 007 大白 kg 5.55 15.50 21.50
2008-6-14 0117950 张三 007 大黑 kg 10.10 15.50 39.25
2008-6-14 0117950 张三 007 深兰 kg 6.05 15.50 23.50
2008-6-15 0133863 张三 007 浅灰 kg 6.20 15.50 24.00
2008-6-16 0133864 李四 004 大白 kg 24.80 6.95 172.36
以上是数据表a
需要统计姓名为张三的客户、按货号和单价分组,并显示最后日期那笔记录的各个字段。以下是需要的结果:
日期 单号 客户 货号 颜色 单位 数量 单价 金额
2007-10-18 0014574 张三 005 大白 kg 70.15 14.50 1,017.00
2007-8-14 0000580 张三 006 大白 kg 41.70 15.00 625.50
2007-6-30 0004336 张三 007 浅灰 kg 6.80 7.50 51.00
2008-3-18 0007360 张三 007 米灰 kg 39.40 14.00 551.50
2008-3-24 0125570 张三 007 大白 kg 23.40 14.50 339.25
2008-5-23 0118535 张三 007 深兰 kg 5.55 15.00 20.75
2008-6-15 0133863 张三 007 浅灰 kg 6.20 15.50 24.00
2007-9-23 0008265 李四 004 大白 kg 12.40 6.95 86.18
2007-9-24 0008266 张三 005 大白 kg 124.45 14.50 1,804.50
2007-10-18 0014574 张三 005 大白 kg 70.15 14.50 1,017.00
2007-8-14 0000580 张三 006 大白 kg 41.70 15.00 625.50
2007-6-30 0004336 张三 007 浅灰 kg 6.80 7.50 51.00
2007-9-6 0007710 张三 007 深兰 kg 55.60 14.00 778.25
2008-2-25 0129666 张三 007 深兰 kg 9.70 14.00 135.75
2008-2-29 0005777 张三 007 大白 kg 436.80 14.00 6,115.00
2008-3-12 0005209 张三 007 大黑 kg 123.30 14.00 1,726.00
2008-3-18 0007360 张三 007 米灰 kg 39.40 14.00 551.50
2007-9-5 0007617 张三 007 浅灰 kg 19.60 14.50 284.25
2007-10-12 0013846 张三 007 大黑 kg 103.10 14.50 1,494.75
2007-10-13 0013873 张三 007 大黑 kg 13.40 14.50 194.25
2007-10-24 0014468 张三 007 浅灰 kg 129.95 14.50 1,884.25
2007-10-28 0012665 张三 007 大黑 kg 1.55 14.50 22.25
2007-11-2 0013204 张三 007 大黑 kg 13.40 14.50 194.25
2007-11-2 0013208 张三 007 深兰 kg 18.30 14.50 265.25
2007-11-7 0014753 张三 007 大黑 kg 2.75 14.50 39.75
2007-11-16 0148965 张三 007 米灰 kg 13.75 14.50 199.25
2007-11-20 0146087 张三 007 深兰 kg 101.55 14.50 1,472.25
2007-12-7 1010757 张三 007 浅灰 kg 25.90 14.50 375.50
2007-12-19 1011090 张三 007 大白 kg 5.55 14.50 80.25
2008-3-10 0006642 张三 007 大黑 kg 13.50 14.50 195.75
2008-3-10 0006671 张三 007 大白 kg 47.25 14.50 685.00
2008-3-14 0006579 张三 007 大黑 kg 9.60 14.50 139.00
2008-3-18 0005635 张三 007 大黑 kg 1.95 14.50 28.25
2008-3-24 0125570 张三 007 大白 kg 23.40 14.50 339.25
2007-8-26 0006289 张三 007 大黑 kg 11.05 15.00 165.75
2007-12-15 1009958 张三 007 深兰 kg 1.70 15.00 25.50
2007-12-19 1011090 张三 007 大黑 kg 8.45 15.00 126.50
2008-1-13 0127785 张三 007 浅灰 kg 14.10 15.00 211.50
2008-1-20 0125140 张三 007 深兰 kg 30.10 15.00 451.50
2008-5-14 0116905 张三 007 浅灰 kg 3.80 15.00 14.25
2008-5-23 0118535 张三 007 深兰 kg 5.55 15.00 20.75
2008-6-14 0117950 张三 007 大白 kg 5.55 15.50 21.50
2008-6-14 0117950 张三 007 大黑 kg 10.10 15.50 39.25
2008-6-14 0117950 张三 007 深兰 kg 6.05 15.50 23.50
2008-6-15 0133863 张三 007 浅灰 kg 6.20 15.50 24.00
2008-6-16 0133864 李四 004 大白 kg 24.80 6.95 172.36
以上是数据表a
需要统计姓名为张三的客户、按货号和单价分组,并显示最后日期那笔记录的各个字段。以下是需要的结果:
日期 单号 客户 货号 颜色 单位 数量 单价 金额
2007-10-18 0014574 张三 005 大白 kg 70.15 14.50 1,017.00
2007-8-14 0000580 张三 006 大白 kg 41.70 15.00 625.50
2007-6-30 0004336 张三 007 浅灰 kg 6.80 7.50 51.00
2008-3-18 0007360 张三 007 米灰 kg 39.40 14.00 551.50
2008-3-24 0125570 张三 007 大白 kg 23.40 14.50 339.25
2008-5-23 0118535 张三 007 深兰 kg 5.55 15.00 20.75
2008-6-15 0133863 张三 007 浅灰 kg 6.20 15.50 24.00
(爱新觉罗.毓华 2007-10-23于浙江杭州)
/*
数据如下:
name val memo
a 2 a2(a的第二个值)
a 1 a1--a的第一个值
a 3 a3:a的第三个值
b 1 b1--b的第一个值
b 3 b3:b的第三个值
b 2 b2b2b2b2
b 4 b4b4
b 5 b5b5b5b5b5
*/
--创建表并插入数据:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('b', 1, 'b1--b的第一个值')
insert into tb values('b', 3, 'b3:b的第三个值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
go--一、按name分组取val最大的值所在行的数据。
--方法1:
select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name
--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)
--方法3:
select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
--方法4:
select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name
/*
name val memo
---------- ----------- --------------------
a 3 a3:a的第三个值
b 5 b5b5b5b5b5
*/--二、按name分组取val最小的值所在行的数据。
--方法1:
select a.* from tb a where val = (select min(val) from tb where name = a.name) order by a.name
--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val < a.val)
--方法3:
select a.* from tb a,(select name,min(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
--方法4:
select a.* from tb a inner join (select name , min(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val < a.val) order by a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值
*/--三、按name分组取第一次出现的行所在的数据。
select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name
/*
name val memo
---------- ----------- --------------------
a 2 a2(a的第二个值)
b 1 b1--b的第一个值
*/--四、按name分组随机取一条数据。
select a.* from tb a where val = (select top 1 val from tb where name = a.name order by newid()) order by a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 5 b5b5b5b5b5
*/--五、按name分组取最小的两个(N个)val
select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val < a.val ) order by a.name,a.val
select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.val
select a.* from tb a where exists (select count(*) from tb where name = a.name and val < a.val having Count(*) < 2) order by a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
a 2 a2(a的第二个值)
b 1 b1--b的第一个值
b 2 b2b2b2b2
*/--六、按name分组取最大的两个(N个)val
select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name,a.val
select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val desc) order by a.name,a.val
select a.* from tb a where exists (select count(*) from tb where name = a.name and val > a.val having Count(*) < 2) order by a.name
/*
name val memo
---------- ----------- --------------------
a 2 a2(a的第二个值)
a 3 a3:a的第三个值
b 4 b4b4
b 5 b5b5b5b5b5
*/
--七,如果整行数据有重复,所有的列都相同。
/*
数据如下:
name val memo
a 2 a2(a的第二个值)
a 1 a1--a的第一个值
a 1 a1--a的第一个值
a 3 a3:a的第三个值
a 3 a3:a的第三个值
b 1 b1--b的第一个值
b 3 b3:b的第三个值
b 2 b2b2b2b2
b 4 b4b4
b 5 b5b5b5b5b5
*/
--在sql server 2000中只能用一个临时表来解决,生成一个自增列,先对val取最大或最小,然后再通过自增列来取数据。
--创建表并插入数据:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('b', 1, 'b1--b的第一个值')
insert into tb values('b', 3, 'b3:b的第三个值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
goselect * , px = identity(int,1,1) into tmp from tbselect m.name,m.val,m.memo from
(
select t.* from tmp t where val = (select min(val) from tmp where name = t.name)
) m where px = (select min(px) from
(
select t.* from tmp t where val = (select min(val) from tmp where name = t.name)
) n where n.name = m.name)drop table tb,tmp/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值(2 行受影响)
*/
--在sql server 2005中可以使用row_number函数,不需要使用临时表。
--创建表并插入数据:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('b', 1, 'b1--b的第一个值')
insert into tb values('b', 3, 'b3:b的第三个值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
goselect m.name,m.val,m.memo from
(
select * , px = row_number() over(order by name , val) from tb
) m where px = (select min(px) from
(
select * , px = row_number() over(order by name , val) from tb
) n where n.name = m.name)drop table tb/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值(2 行受影响)
*/
from tb as t
where 姓名='张三'
and not exists(select * from tb where 姓名='张三' and 货号=t.货号 and 单价=t.单价 and 日期>t.日期)
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (日期 datetime,单号 varchar(7),客户 nvarchar(4),货号 nvarchar(3),颜色 nvarchar(4),单位 varchar(2),数量 numeric(5,2),单价 numeric(4,2),金额 numeric(6,2))
insert into #T
select '2007-9-23','0008265','李四','004','大白','kg',12.40,6.95,86.18 union all
select '2007-9-24','0008266','张三','005','大白','kg',124.45,14.50,1804.50 union all
select '2007-10-18','0014574','张三','005','大白','kg',70.15,14.50,1017.00 union all
select '2007-8-14','0000580','张三','006','大白','kg',41.70,15.00,625.50 union all
select '2007-6-30','0004336','张三','007','浅灰','kg',6.80,7.50,51.00 union all
select '2007-9-6','0007710','张三','007','深兰','kg',55.60,14.00,778.25 union all
select '2008-2-25','0129666','张三','007','深兰','kg',9.70,14.00,135.75 union all
select '2008-2-29','0005777','张三','007','大白','kg',436.80,14.00,6115.00 union all
select '2008-3-12','0005209','张三','007','大黑','kg',123.30,14.00,1726.00 union all
select '2008-3-18','0007360','张三','007','米灰','kg',39.40,14.00,551.50 union all
select '2007-9-5','0007617','张三','007','浅灰','kg',19.60,14.50,284.25 union all
select '2007-10-12','0013846','张三','007','大黑','kg',103.10,14.50,1494.75 union all
select '2007-10-13','0013873','张三','007','大黑','kg',13.40,14.50,194.25 union all
select '2007-10-24','0014468','张三','007','浅灰','kg',129.95,14.50,1884.25 union all
select '2007-10-28','0012665','张三','007','大黑','kg',1.55,14.50,22.25 union all
select '2007-11-2','0013204','张三','007','大黑','kg',13.40,14.50,194.25 union all
select '2007-11-2','0013208','张三','007','深兰','kg',18.30,14.50,265.25 union all
select '2007-11-7','0014753','张三','007','大黑','kg',2.75,14.50,39.75 union all
select '2007-11-16','0148965','张三','007','米灰','kg',13.75,14.50,199.25 union all
select '2007-11-20','0146087','张三','007','深兰','kg',101.55,14.50,1472.25 union all
select '2007-12-7','1010757','张三','007','浅灰','kg',25.90,14.50,375.50 union all
select '2007-12-19','1011090','张三','007','大白','kg',5.55,14.50,80.25 union all
select '2008-3-10','0006642','张三','007','大黑','kg',13.50,14.50,195.75 union all
select '2008-3-10','0006671','张三','007','大白','kg',47.25,14.50,685.00 union all
select '2008-3-14','0006579','张三','007','大黑','kg',9.60,14.50,139.00 union all
select '2008-3-18','0005635','张三','007','大黑','kg',1.95,14.50,28.25 union all
select '2008-3-24','0125570','张三','007','大白','kg',23.40,14.50,339.25 union all
select '2007-8-26','0006289','张三','007','大黑','kg',11.05,15.00,165.75 union all
select '2007-12-15','1009958','张三','007','深兰','kg',1.70,15.00,25.50 union all
select '2007-12-19','1011090','张三','007','大黑','kg',8.45,15.00,126.50 union all
select '2008-1-13','0127785','张三','007','浅灰','kg',14.10,15.00,211.50 union all
select '2008-1-20','0125140','张三','007','深兰','kg',30.10,15.00,451.50 union all
select '2008-5-14','0116905','张三','007','浅灰','kg',3.80,15.00,14.25 union all
select '2008-5-23','0118535','张三','007','深兰','kg',5.55,15.00,20.75 union all
select '2008-6-14','0117950','张三','007','大白','kg',5.55,15.50,21.50 union all
select '2008-6-14','0117950','张三','007','大黑','kg',10.10,15.50,39.25 union all
select '2008-6-14','0117950','张三','007','深兰','kg',6.05,15.50,23.50 union all
select '2008-6-15','0133863','张三','007','浅灰','kg',6.20,15.50,24.00 union all
select '2008-6-16','0133864','李四','004','大白','kg',24.80,6.95,172.36select *
from #T as t
where 客户='张三'
and not exists(select * from #T where 客户='张三' and 货号=t.货号 and 单价=t.单价 and 日期>t.日期)
/*
日期 单号 客户 货号 颜色 单位 数量 单价 金额
----------------------- ------- ---- ---- ---- ---- --------------------------------------- --------------------------------------- ---------------------------------------
2007-10-18 00:00:00.000 0014574 张三 005 大白 kg 70.15 14.50 1017.00
2007-08-14 00:00:00.000 0000580 张三 006 大白 kg 41.70 15.00 625.50
2007-06-30 00:00:00.000 0004336 张三 007 浅灰 kg 6.80 7.50 51.00
2008-03-18 00:00:00.000 0007360 张三 007 米灰 kg 39.40 14.00 551.50
2008-03-24 00:00:00.000 0125570 张三 007 大白 kg 23.40 14.50 339.25
2008-05-23 00:00:00.000 0118535 张三 007 深兰 kg 5.55 15.00 20.75
2008-06-15 00:00:00.000 0133863 张三 007 浅灰 kg 6.20 15.50 24.00(7 行受影响)
*/
from #T as t
where 客户='张三'
and not exists(select * from #T where 客户='张三' and 货号=t.货号 and 单价=t.单价 and 日期>t.日期)
--测试成功.
select *
from #T as t
where 客户='张三'
and 日期=(select top 1 日期 from #T where 客户='张三' and 货号=t.货号 and 单价=t.单价 order by 日期 desc)
from tb as t
where 姓名='张三'
and not exists(select * from tb where 姓名='张三' and 货号=t.货号 and 单价=t.单价 and 日期>t.日期)
declare @tb table([日期] Datetime,[单号] nvarchar(7),[客户] nvarchar(2),[货号] nvarchar(3),[颜色] nvarchar(2),[单位] nvarchar(2),[数量] decimal(18,2),[单价] decimal(18,2),[金额] nvarchar(8))
Insert @tb
select '2007-9-23',N'0008265',N'李四',N'004',N'大白',N'kg',12.40,6.95,N'86.18' union all
select '2007-9-24',N'0008266',N'张三',N'005',N'大白',N'kg',124.45,14.50,N'1,804.50' union all
select '2007-10-18',N'0014574',N'张三',N'005',N'大白',N'kg',70.15,14.50,N'1,017.00' union all
select '2007-8-14',N'0000580',N'张三',N'006',N'大白',N'kg',41.70,15.00,N'625.50' union all
select '2007-6-30',N'0004336',N'张三',N'007',N'浅灰',N'kg',6.80,7.50,N'51.00' union all
select '2007-9-6',N'0007710',N'张三',N'007',N'深兰',N'kg',55.60,14.00,N'778.25' union all
select '2008-2-25',N'0129666',N'张三',N'007',N'深兰',N'kg',9.70,14.00,N'135.75' union all
select '2008-2-29',N'0005777',N'张三',N'007',N'大白',N'kg',436.80,14.00,N'6,115.00' union all
select '2008-3-12',N'0005209',N'张三',N'007',N'大黑',N'kg',123.30,14.00,N'1,726.00' union all
select '2008-3-18',N'0007360',N'张三',N'007',N'米灰',N'kg',39.40,14.00,N'551.50' union all
select '2007-9-5',N'0007617',N'张三',N'007',N'浅灰',N'kg',19.60,14.50,N'284.25' union all
select '2007-10-12',N'0013846',N'张三',N'007',N'大黑',N'kg',103.10,14.50,N'1,494.75' union all
select '2007-10-13',N'0013873',N'张三',N'007',N'大黑',N'kg',13.40,14.50,N'194.25' union all
select '2007-10-24',N'0014468',N'张三',N'007',N'浅灰',N'kg',129.95,14.50,N'1,884.25' union all
select '2007-10-28',N'0012665',N'张三',N'007',N'大黑',N'kg',1.55,14.50,N'22.25' union all
select '2007-11-2',N'0013204',N'张三',N'007',N'大黑',N'kg',13.40,14.50,N'194.25' union all
select '2007-11-2',N'0013208',N'张三',N'007',N'深兰',N'kg',18.30,14.50,N'265.25' union all
select '2007-11-7',N'0014753',N'张三',N'007',N'大黑',N'kg',2.75,14.50,N'39.75' union all
select '2007-11-16',N'0148965',N'张三',N'007',N'米灰',N'kg',13.75,14.50,N'199.25' union all
select '2007-11-20',N'0146087',N'张三',N'007',N'深兰',N'kg',101.55,14.50,N'1,472.25' union all
select '2007-12-7',N'1010757',N'张三',N'007',N'浅灰',N'kg',25.90,14.50,N'375.50' union all
select '2007-12-19',N'1011090',N'张三',N'007',N'大白',N'kg',5.55,14.50,N'80.25' union all
select '2008-3-10',N'0006642',N'张三',N'007',N'大黑',N'kg',13.50,14.50,N'195.75' union all
select '2008-3-10',N'0006671',N'张三',N'007',N'大白',N'kg',47.25,14.50,N'685.00' union all
select '2008-3-14',N'0006579',N'张三',N'007',N'大黑',N'kg',9.60,14.50,N'139.00' union all
select '2008-3-18',N'0005635',N'张三',N'007',N'大黑',N'kg',1.95,14.50,N'28.25' union all
select '2008-3-24',N'0125570',N'张三',N'007',N'大白',N'kg',23.40,14.50,N'339.25' union all
select '2007-8-26',N'0006289',N'张三',N'007',N'大黑',N'kg',11.05,15.00,N'165.75' union all
select '2007-12-15',N'1009958',N'张三',N'007',N'深兰',N'kg',1.70,15.00,N'25.50' union all
select '2007-12-19',N'1011090',N'张三',N'007',N'大黑',N'kg',8.45,15.00,N'126.50' union all
select '2008-1-13',N'0127785',N'张三',N'007',N'浅灰',N'kg',14.10,15.00,N'211.50' union all
select '2008-1-20',N'0125140',N'张三',N'007',N'深兰',N'kg',30.10,15.00,N'451.50' union all
select '2008-5-14',N'0116905',N'张三',N'007',N'浅灰',N'kg',3.80,15.00,N'14.25' union all
select '2008-5-23',N'0118535',N'张三',N'007',N'深兰',N'kg',5.55,15.00,N'20.75' union all
select '2008-6-14',N'0117950',N'张三',N'007',N'大白',N'kg',5.55,15.50,N'21.50' union all
select '2008-6-14',N'0117950',N'张三',N'007',N'大黑',N'kg',10.10,15.50,N'39.25' union all
select '2008-6-14',N'0117950',N'张三',N'007',N'深兰',N'kg',6.05,15.50,N'23.50' union all
select '2008-6-15',N'0133863',N'张三',N'007',N'浅灰',N'kg',6.20,15.50,N'24.00' union all
select '2008-6-16',N'0133864',N'李四',N'004',N'大白',N'kg',24.80,6.95,N'172.36'select * from @tb as t where [客户]='张三'
and [日期] = (select max([日期]) from @tb where [客户]='张三' and [货号]=t.[货号] and [单价]=t.[单价])
/*
日期 单号 客户 货号 颜色 单位 数量 单价 金额
----------------------- ------- ---- ---- ---- ---- --------------------------------------- --------------------------------------- --------
2008-06-15 00:00:00.000 0133863 张三 007 浅灰 kg 6.20 15.50 24.00
2008-05-23 00:00:00.000 0118535 张三 007 深兰 kg 5.55 15.00 20.75
2008-03-24 00:00:00.000 0125570 张三 007 大白 kg 23.40 14.50 339.25
2008-03-18 00:00:00.000 0007360 张三 007 米灰 kg 39.40 14.00 551.50
2007-06-30 00:00:00.000 0004336 张三 007 浅灰 kg 6.80 7.50 51.00
2007-08-14 00:00:00.000 0000580 张三 006 大白 kg 41.70 15.00 625.50
2007-10-18 00:00:00.000 0014574 张三 005 大白 kg 70.15 14.50 1,017.00
*/
and [日期] = (select max([日期]) from @tb where [客户]='张三' and [货号]=t.[货号] and [单价]=t.[单价])这方法不错的了