T1: id 状态 时间
1 a t1
1 b t2
2 b t3
2 a t4T2:id 名称 类型
1 name1 type1
2 name2 type2表T1和表T2的id关联,其中T1中的时间各不相同,我想得到T1中各类状态组里时间最大的那条记录的所有信息,结果为:
(以下假设:t2>t1 t4>t3)
id 状态 时间 名称 类型
1 b t2 name1 type1
2 a t4 name2 type2
1 a t1
1 b t2
2 b t3
2 a t4T2:id 名称 类型
1 name1 type1
2 name2 type2表T1和表T2的id关联,其中T1中的时间各不相同,我想得到T1中各类状态组里时间最大的那条记录的所有信息,结果为:
(以下假设:t2>t1 t4>t3)
id 状态 时间 名称 类型
1 b t2 name1 type1
2 a t4 name2 type2
from t1 a
inner join t2 b on a.id=b.id
where not exists(select 1 from t1 where 状态=a.状态 and 时间>a.时间)
from t1 a
left join t2 b on a.id=b.id
where not exists(select 1 from t1 where 状态=a.状态 and 时间>a.时间)
在T1中,有很多不同的id,而同一个id有很多不同的状态,这些状态又对应不同的时间,我的问题主要要取到T1里同一个id且同一个状态那一类中的具有最大时间的那条记录。
select a.id,a.状态,a.时间,b.名称,b.类型
from t1 a
left join t2 b on a.id=b.id
where a.时间 in (select top 1 时间 from t1 where a.id=id and a.状态=状态 order by 时间)
如果最大时间都是20:00 有两条记录..是取一条呢还是两条?
select a.id,a.状态,a.时间,b.名称,b.类型
from t1 a
left join t2 b on a.id=b.id
where a.id+a.状态 in (select top 1 id+状态 from t1 where a.id=id and a.状态=状态 order by 时间)
FROM T1 INNER JOIN
T2 ON T1.id = T2.id
GROUP BY T1.id, T2.名称, T2.类型我用以上方式获得了一部分结果,但是得不到“T1.状态”,因为一旦在select和group by中加入“T1.状态”,结果就把所有的记录取出来了?!
就差状态了,得到就一切over,唉帮帮我,大侠
insert into @T1 select 1,'a','2008-08-19 00:00:00'
insert into @T1 select 2,'b','2008-08-21 00:00:00'
insert into @T1 select 3,'b','2008-08-21 00:00:00'
insert into @T1 select 4,'a','2008-08-22 00:00:00'
insert into @T1 select 4,'c','2008-08-22 00:00:00' declare @T2 table(id int,T_name nvarchar(20),model nvarchar(20))
insert into @T2 select 1,'name1','type1'
insert into @T2 select 2,'name2','type2'declare @T3 table(realid int identity(1,1),id int ,Stat nvarchar(20),DateState datetime,T_name nvarchar(20),model nvarchar(20))insert into @T3
select a.id,a.Stat,a.DateState,b.T_name,b.model
from @T1 a left join @T2 b on a.id=b.idselect *
from @T3
where realid in(
select max(realid) as realid
from @T3
group by Stat)假如例子不对的话,可以看看思路,呵呵
from T1 inner join T2 on(T1.id=T2.id)
where T1.时间=(select max(时间) from T1)
group by T1.id
您和我的思路很接近。但是,我被这样一个问题所困扰:并非始终能够取到同一个id的最大时间的那一条记录,有时取到的却是该id的两条记录!以下是我的sql真实语句(事实上,这里有三个表通过id关联在一起的——Manuscript_Accept、Manusrcipt_upload和History):SELECT Manuscript_Accept.id, Manuscript_Accept.对方案号, Manuscript_Accept.我方案号,
Manusrcipt_upload.语种, Manusrcipt_upload.代理名称, Manusrcipt_upload.稿件名称,
Manusrcipt_upload.字数, Manusrcipt_upload.附图页数, Manusrcipt_upload.申请日,
Manusrcipt_upload.提交时间, Manusrcipt_upload.用户名,
Manusrcipt_upload.稿件路径, History.稿件状态, History.时间
FROM History INNER JOIN
Manusrcipt_upload ON History.id = Manusrcipt_upload.id INNER JOIN
Manuscript_Accept ON Manusrcipt_upload.id = Manuscript_Accept.id
WHERE (History.时间 IN
(SELECT MAX(时间) AS Expr1
FROM History AS History_1
GROUP BY id))
ORDER BY Manusrcipt_upload.提交时间 DESC此时,我的问题归结为:一旦在group by里指定了“状态”列之后,MAX函数就失效了,取到的却是所有的记录?
您的方法出现如下问题:“选择列表中的列‘状态’无效,因为该列没有包含在聚合函数或group by子句中”。但是,如果将“状态”、“时间”、“名称”和“类型”放进group by之后,取到的将是所有记录里最大时间的那一条,而不是不同一个id的那些记录中具有最大时间值的那些记录。感觉只有一步之遥了!期待中