0

假设我在 Teradata 数据库中有一个相当大的表“Sales”,其中包含每笔销售的每日记录,我想编写一个 SQL 语句,将其限制为仅最新日期。这并不总是前一天,例如,如果是星期一,则最晚日期将是前一个星期五。

我知道我可以通过以下方式获得结果:

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

我不知道它将如何处理子查询,并且由于 Sales 是一个大表,如果没有另一个我可以使用的表,是否有更有效的方法来做到这一点?

4

2 回答 2

2

另一种(更灵活)获得前 n 名的方法是利用 OLAP 函数:

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

这将返回具有最大日期的所有行。如果您只想要其中一个,请切换到 ROW_NUMBER。

于 2019-03-20T21:35:57.167 回答
1

这可能很好,如果你有一个关于salesdate.

如果只有一行,那么我建议:

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

特别是,这应该使用上的索引salesdate

如果多于一排,请使用top 1 with ties.

于 2019-03-20T20:48:19.710 回答