Sql Server двойной подзапрос - PullRequest
       9

Sql Server двойной подзапрос

0 голосов
/ 08 октября 2009

У меня есть таблица, которая похожа на историческую таблицу ... поэтому у меня есть такие данные

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

Мне нужно извлечь числоMov на основе новейшей finalDate из каждой idA, поэтому я использую это

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")

Я чувствую, что есть лучшее решение, но не могу придумать ни одного, мне действительно не нравится иметь там два подзапроса.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 08 октября 2009

Недостаточно информации, чтобы протестировать ее самостоятельно, но что-то подобное может сработать.

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 голосов
/ 08 октября 2009

Вы не говорите, какой выпуск 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...