Как получить самую последнюю запись, используя TSQL? - PullRequest
0 голосов
/ 01 декабря 2011
Table a
ID Name
1  aa
2  bb
3  cc

Table b
ID Name  DateTime     aID
1  a1    2010-10-10   1
2  b1    2010-11-10   1
3  c1    2011-01-01   1
4  d1    2010-09-09   2
4  e1    2010-09-09   2


SELECT a.Name, b.Name
FROM Table a
LEFT JOIN Table b ON (a.ID = b.aID, b.status = 1)

В результате этого запроса мне нужны только те записи, где max (datetime) в таблице b.Результат: -

аа, с1

Примечание: в моем реальном запросе у меня много много соединений и условий.Группировка по не будет работать здесь.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011
WHERE b.DateTime = (SELECT MAX(DateTime) FROM b)
0 голосов
/ 02 декабря 2011

Это метод, который использует функцию ранжирования для определения «самой большой» даты, а затем фильтрует запрос. Внимание: при определенных обстоятельствах он может работать не очень хорошо.

SELECT a.Name, b.Name
FROM Table a
LEFT JOIN (
  select aID, DateTime, rank() over (order by b.DateTime desc) as rownum
  from TableB
) b ON a.ID = b.aID and b.status = 1
where
b.rownum = 1 -- first row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...