在 table - Teradata SQL 中有效地找到最后一个日期
Efficiently find last date in a table - Teradata SQL
假设我在 Teradata 数据库中有一个相当大的 table,"Sales" 每天都有每次销售的记录,我想写一个 SQL 语句来限制它仅限最新日期。这并不总是前一天,例如,如果是星期一,则最晚日期将是前一个星期五。
我知道我可以通过以下方式得到结果:
SELECT s.*
FROM Sales s
JOIN (
SELECT MAX(SalesDate) as SalesDate
FROM Sales
) sd
ON s.SalesDate=sd.SalesDt
我不知道它将如何处理子查询,并且由于销售额很大 table 如果没有其他 table 我可以使用,是否会有更有效的方法来执行此操作?
如果您在 salesdate
上有索引,那可能没问题。
如果只有一行,那我推荐:
select top 1 s.*
from sales s
order by salesdate desc;
特别是,这应该使用 salesdate
上的索引。
如果多于一行,使用top 1 with ties
。
获得 top n 的另一种(更灵活)方法是利用 OLAP 函数:
SELECT *
FROM Sales s
QUALIFY
RANK() OVER (ORDER BY SalesDate DESC) = 1
这将 return 所有 具有最大日期的行。如果您只想要其中之一,请切换到 ROW_NUMBER.
假设我在 Teradata 数据库中有一个相当大的 table,"Sales" 每天都有每次销售的记录,我想写一个 SQL 语句来限制它仅限最新日期。这并不总是前一天,例如,如果是星期一,则最晚日期将是前一个星期五。
我知道我可以通过以下方式得到结果:
SELECT s.*
FROM Sales s
JOIN (
SELECT MAX(SalesDate) as SalesDate
FROM Sales
) sd
ON s.SalesDate=sd.SalesDt
我不知道它将如何处理子查询,并且由于销售额很大 table 如果没有其他 table 我可以使用,是否会有更有效的方法来执行此操作?
如果您在 salesdate
上有索引,那可能没问题。
如果只有一行,那我推荐:
select top 1 s.*
from sales s
order by salesdate desc;
特别是,这应该使用 salesdate
上的索引。
如果多于一行,使用top 1 with ties
。
获得 top n 的另一种(更灵活)方法是利用 OLAP 函数:
SELECT *
FROM Sales s
QUALIFY
RANK() OVER (ORDER BY SalesDate DESC) = 1
这将 return 所有 具有最大日期的行。如果您只想要其中之一,请切换到 ROW_NUMBER.