首页 > 解决方案 > 高效查找表中的最后日期 - Teradata SQL

问题描述

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

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

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

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

标签: sqlteradata

解决方案


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

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

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


推荐阅读