Эффективно найти последнюю дату в таблице - Teradata SQL - PullRequest
0 голосов
/ 20 марта 2019

Скажем, у меня есть довольно большая таблица в базе данных Teradata, "Продажи", в которой есть ежедневная запись для каждой продажи, и я хочу написать оператор SQL, который ограничивает это только самой последней датой. Это не всегда будет предыдущий день, например, если это был понедельник, самой последней датой будет предыдущая пятница.

Я знаю, что могу получить следующие результаты:

SELECT s.*
FROM Sales s
JOIN (
      SELECT MAX(SalesDate) as SalesDate 
      FROM Sales
) sd 
ON s.SalesDate=sd.SalesDt

Я не знаю, как он будет обрабатывать подзапрос, и, поскольку Sales - это большая таблица, будет ли более эффективный способ сделать это, если нет другой таблицы, которую я мог бы использовать?

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Другой (более гибкий) способ получения top n использует OLAP-функции:

SELECT *
FROM Sales s
QUALIFY
  RANK() OVER (ORDER BY SalesDate DESC) = 1

Это вернет все строк с максимальной датой.Если вы хотите, чтобы только один из них переключился на ROW_NUMBER.

1 голос
/ 20 марта 2019

Это, вероятно, хорошо, если у вас есть индекс на salesdate.

Если есть только одна строка, я бы порекомендовал:

select top 1 s.*
from sales s
order by salesdate desc;

В частности, это должноиспользуйте индекс для salesdate.

Если имеется более одной строки, используйте top 1 with ties.

...