日期:2014-05-18  浏览次数:20779 次

求一个sql语句,取历史表上最新的价格和所在的日期
求一条sql语句  
有4个字段,名称,价格,   日期   ,单位
 
a   1.2   07-6-12   ,d
a   1.2   07-6-12   ,d
a   1.1   07-6-11,   a
b   3.5   07-6-10,   b

如何取到最新的价格和所在的日期和单位     ,如
a   1.2   07-6-12,d
b   3.5   07-6-10   ,b  

请注意,相同的日期,相同的名称只要一条就够了
谢谢!


------解决方案--------------------
----方法1:
select * from table as a where not exists(select 1 from table where 名称=a.名称 and 日期 > a.日期)

----方法2:
select * from table as a where 日期=(select max(日期) from table where 名称=a.名称)
------解决方案--------------------
create table #aa( 名称 varchar(5),价格 varchar(5),日期 datetime,单位 varchar(5))
insert into #aa
select 'a ', '1.2 ', '07-6-12 ' , 'd ' union all
select 'a ', '1.2 ', '07-6-12 ' , 'd ' union all
select 'a ', '1.1 ', '07-6-11 ' , 'a ' union all
select 'b ', '3.1 ', '07-6-10 ' , 'b '

select distinct * from #aa a where
not exists(select 1 from #aa b where a.名称=b.名称 and a.日期 <日期)

drop table #aa


(所影响的行数为 4 行)

名称 价格 日期 单位
----- ----- ------------------------------------------------------ -----
a 1.2 2007-06-12 00:00:00.000 d
b 3.1 2007-06-10 00:00:00.000 b

(所影响的行数为 2 行)
------解决方案--------------------
select distinct * from 表 a (select 名称,max(日期) as 日期 from 表 group by 名称) b
where a.名称=b.名称 and a.日期=b.日期