日期:2014-05-18 浏览次数:20416 次
select * from 表 a where 发表时间=(select max(发表时间) from 表 where 类型=a.类型)
------解决方案--------------------
--原始数据:@T declare @T table(id int,类型 varchar(8),内容 int,发表时间 datetime) insert @T select 1,'¦A',12344455,'2007-9-10' union all select 2,'¦B',34223424,'2007-9-12' union all select 3,'¦C',11111111,'2007-9-13' union all select 1,'¦A',12344455,'2007-10-10' union all select 2,'¦B',34223424,'2007-10-12' select *
------解决方案--------------------
--可以使用cross apply create function dbo.myfunc(@id as int) returns table as return select top(1) * from dbo.test where id=@id order by 发表时间 desc; go select b.id,b.类型,b.内容,b.发表时间 from dbo.test a cross apply dbo.myfunc(a.id) as b group by b.id,b.类型,b.内容,b.发表时间; go ------------------- id 类型 内容 发表时间 ----------- -------- ----------- ----------------------- 1 A 12344455 2007-10-10 00:00:00.000 2 B 34223424 2007-10-12 00:00:00.000 3 C 11111111 2007-09-13 00:00:00.000 (3 row(s) affected)
------解决方案--------------------
create table T(id int,类型 varchar(8),内容 int,发表时间 datetime)
insert T
select 1,'¦A',12344455,'2007-9-10' union all
select 2,'¦B',34223424,'2007-9-12' union all
select 3,'¦C',11111111,'2007-9-13' union all
select 1,'¦A',12344455,'2007-10-10' union all
select 2,'¦B',34223424,'2007-10-12'
select a.* from T a
inner join
(
select 类型,max(发表时间)as 发表时间 from T group by 类型
)b on a.类型=b.类型 and a.发表时间=b.发表时间
order by a.类型
--result:
1 ¦A 12344455 2007-10-10 00:00:00.000
2 ¦B 34223424 2007-10-12 00:00:00.000
3 ¦C 11111111 2007-09-13 00:00:00.000
------解决方案--------------------
select * from 表 a where 发表时间=(select top 1 发表时间 from 表 where 类型=a.类型 order by 发表时间)
------解决方案--------------------
create table tb (id int ,lx char(2), lr char(20),fbsj datetime)
insert tb select 1 ,'A', '12344455', '2007-9-10' union all select
2,'B', '34223424', '2007-9-12' union all select
3,'C', '11111111', '2007-9-13' union all select
1,'A', '12344455', '2007-10-10' union all select
2,'B', '34223424', '2007-10-12'
//最新的一条记录.
select * from tb a where not exists (select * from tb where id=a.id and fbsj>a.fbsj )
//最早的一条记录
select * from tb a where not exists (select * from tb where id=a.id and fbsj<a.fbsj )
------解决方案--------------------
declare @T table(id int,type varchar(8),text int,sdate datetime)
insert @T
select 1,'¦A',12344455,'2007-9-10' union all
select 2,'¦B',34223424,'2007-9-12' union all
select 3,'¦C',11111111,'2007-9-13' union all
select 1,'¦A',12344455,'2007-10-10' union all
select 2,'¦B',34223424,'2007-10-12'
select id,type,text,max(sdate) sdate from (select id,type,text,sdate from @t group by type,id,text,sdate) a group by id,type,text