Sql server Sql Server双子查询

Sql server Sql Server双子查询,sql-server,subquery,Sql Server,Subquery,我有一张桌子,有点像一张历史悠久的桌子。。。所以我有这样的数据 最终日期 1 10 20090209 2 14 20090304 1 12 20090304 3 54 20080508 4 42 20090510 ... ... .... 我需要根据每个idA的最新最终日期检索numberMov,所以我使用这个 从select idA中选择a.numb

我有一张桌子,有点像一张历史悠久的桌子。。。所以我有这样的数据

最终日期 1 10 20090209 2 14 20090304 1 12 20090304 3 54 20080508 4 42 20090510 ... ... ....

我需要根据每个idA的最新最终日期检索numberMov,所以我使用这个

从select idA中选择a.numberMov,从表1中选择maxfinalDate maxDate按idA分组为b内部联接表1 a在a.idA=b.idA和a.finalDate=b.maxDate上

现在我有另一个类似这样的问题

从n个表中选择m个字段,其中n5.numberMov在此处插入第一个查询

我觉得有更好的解决方案,但想不出任何解决方案,我真的不喜欢有两个子查询


有什么建议吗?

您没有说是哪个版本的SQL server,但这将在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)

没有足够的信息来自己测试它,但类似的东西可能会起作用

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