Получить строку с Макс Дата - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь написать запрос, чтобы получить строку с maxdate.

Проведя исследование, я обнаружил, что следующий запрос должен работать:

SELECT OrgSeatID, CreateDate, T.ROW
FROM (SELECT OrgSeatID, CreateDate, ROW_NUMBER() OVER(PARTITION BY OrgSeatID ORDER BY CreateDate DESC) AS [ROW]
      FROM OrgSeat) AS T
WHERE T.[ROW] = 1

Однако он возвращаетвсе строки, он не упорядочивает DESD CreateDate, как следует, и столбец ROW читает 1 для всех строк.

Кто-нибудь может увидеть, что я делаю неправильно с этим запросом?

1 Ответ

1 голос
/ 13 июня 2019

Запрос, который вы написали, вернет самую последнюю созданную запись для OrgSeatID согласно вашему PARTITION BY.Таким образом, вы получаете по одной строке на каждый OrgSeatID, существующий в вашей базе данных, поскольку оконная функция ROW_NUMBER() создает раздел для каждого из них, а затем упорядочивает строки в этом разделе.

Если вы хотите самый последнийзапись всех ваших записей, действительно самый простой способ - просто:

SELECT TOP 1 OrgSeatID, CreateDate
  FROM OrgSeat
 ORDER BY CreateDate DESC

Эквивалент использования оконной функции, хотя и менее оптимальный, будет:

SELECT OrgSeatID, CreateDate, T.ROW
  FROM (SELECT OrgSeatID, CreateDate, ROW_NUMBER() OVER(ORDER BY CreateDate DESC) AS [ROW]
          FROM OrgSeat
     ) AS T
 WHERE T.[ROW] = 1
...