2009-10-08 62 views
0

我有一个表,是有点像一个历史悠久的表......所以我有这样Sql Server的双重子查询

idA numberMov FinalDate
1 10 20090209
2 14 20090304
1 12 20090304
3 54 20080508
4 42 20090510
... ... ....数据

我需要根据每个IDA的最新finalDate检索numberMov所以我用这个

select a.numberMov from (select idA, max(finalDate) maxDate from table1 group by idA) as b inner join table1 a on a.idA=b.idA and a.finalDate = b.maxDate

现在我有这样

select m fields from n tables where n5.numberMov in ("insert first query here")

我觉得有一个更好的另一个查询解决方案,但不能想到任何,我真的不喜欢有两个子查询在那里。

有什么建议吗?

回答

0

没有足够的信息工作,以测试它自己,但这样的事情可能会奏效。

select m fields 
from a inner join 
(select numberMov, 
    max(FinalDate) as maxDate 
from a 
group by numberMov) b 
    on a.numberMov = b.numberMov 
    and a.FinalDate = b.maxDate inner join 
n tables on a.numberMov = n.numberMov 
0

你不说SQL服务器的哪个版本,但是这将在SQL 2005+

;WITH rankCTE 
AS 
(
    SELECT idA 
      ,numberMov 
      ,FinalDate 
      ,ROW_NUMBER() OVER (PARTITION BY idA 
           ORDER BY FinalDate DESC 
          ) AS rn 
    FROM table1 
) 
,latestCTE 
AS 
(
    SELECT idA 
      ,numberMov 
      ,FinalDate 
    FROM rankCTE 
    WHERE rn = 1 
) 
SELECT m fields 
FROM n tables 
WHERE n5.numberMov IN (SELECT numberMov FROM latestCTE)