Показать сообщение отдельно
Старый 20.11.2008, 15:15   #11  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Владимир, на самом деле ваш запрос и мой - это одно и тоже, только у вас было дополнительное условие на recId, которое по смыслу является лишним, т.к. оно никогда не будет равно из-за условия
X++:
&& myTable2.TransDate > myTable.TransDate
Именно это я имел ввиду, когда написал "Помойму в данном случае вы перемудрили с recid."
А вот "Ваш вапрос не вернёт нужные данные, если за нужную дату окажется несколько строк.." было лишним, это уже я ошибся, т.к. думал уже о том, что буду писать дальше.

А дальше следующее: насчёт "!=" и ">":

Исходный запрос возвращает именно все строки с максимальной датой, т.е. несколько, если бы их было несколько в таблице. (вопрос о том какие данные в таблице мы не рассматриваем)

А вот если бы нужно было только одно из них, то тогда и надо было бы использовать проверку рекID и именно с ">" или "<", т.к. иначе запрос не вернул бы данных.
т.е. если бы условие было
X++:
&& myTable2.TransDate >= myTable.TransDate
Вот это не вернёт ничего (тут надо < или >):

X++:
Select T1.Transdate, T1.Key, T1.Value
  From Mytable T1
 Where T1.Transdate <= getDate()
   And Not Exists (
          Select Null
            From Mytable T2
           Where T2.Recid != T1.Recid
             And T2.Key = T1.Key
             And T2.Transdate >= T1.Transdate
             And T2.Transdate <= getDate())
но к исходному вопросу эта вторая часть уже отношения не имеет. )
__________________
Zhirenkov Vitaly