读书人

新手请问:如果某字段记录相同,怎样根据

发布时间: 2012-02-19 19:43:39 作者: rapoo

新手请教:如果某字段记录相同,怎样根据日期查询最后一条记录?
如果编号相同则选日期最大的记录如下:
编号 日期 字段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



drop table tt

(所影响的行数为 5 行)

id dt col1 col2
-------------------- ------------------------------------------------------ -------------------- --------------------
0099 2007-03-18 00:00:00.000 0 1
1000 2007-02-08 00:00:00.000 2 c
1001 2007-02-02 00:00:00.000 0 c

(所影响的行数为 3 行)

读书人网 >SQL Server

热点推荐