日期:2014-05-19  浏览次数:20526 次

新手请教:如果某字段记录相同,怎样根据日期查询最后一条记录?
如果编号相同则选日期最大的记录如下:
  编号             日期               字段1       字段2         ...
  1000         2007-01-01           1                 a           ...
  0099         2007-02-03           2                 b           ...
  1000         2007-02-08           2                 c           ...
  1001         2007-02-02           0                 c           ...
  0099         2007-03-18           0                 l           ...
  ...             ...                       .                 .           ...

得到:
  编号             日期               字段1       字段2         ...
  0099         2007-03-18           0                 l           ...
  1000         2007-02-08           2                 c           ...
  1001         2007-02-02           0                 c           ...

------解决方案--------------------
select * from 表 a where not exists (select 1 from 表 编号=a.编号 and 日期> a.日期 )
------解决方案--------------------
--方法一:
Select A.* From TableName A Where 日期 = (Select Max(日期) From TableName Where 编号 = A.编号)
Order By A.编号
--方法二:
Select A.* From TableName A Where Not Exists (Select 日期 From TableName Where 编号 = A.编号 And 日期 > A.日期)
Order By A.编号

--方法三:
Select A.* From TableName A Inner Join (Select 编号, Max(日期) As 日期 From TableName Group By 编号) B
On A.编号 = B.编号 And A.日期 = B.日期
Order By A.编号
------解决方案--------------------
create table tt(id varchar(20),
dt datetime,
col1 varchar(20),
col2 varchar(20))

insert into tt select '1000 ', '2007-01-01 ', '1 ', 'a '
union all select '0099 ', '2007-02-03 ', '2 ', 'b '
union all select '1000 ', '2007-02-08 ', '2 ', 'c '
union all select '1001 ', '2007-02-02 ', '0 ', 'c '
union all select '0099 ', '2007-03-18 ', '0 ', '1 '

--select * from tt

select id
,dt
,col1
,col2
from tt a
where dt = ( select top 1 dt
from tt b
where b.id = a.id
order by b.dt desc
)
order by id