在表中有效查找最后日期-Teradata SQL

时间:2019-03-20 20:41:25

标签: sql teradata

说,我在Teradata数据库中有一个相当大的表“ Sales”,其中有每笔销售的每日记录,我想编写一条SQL语句将其仅限于最新日期。例如,如果今天不是星期一,那么最近的日期将是前一个星期五。

我知道我可以通过以下方法得到结果:

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

我不知道如何处理子查询,并且由于Sales是一个大表,如果没有我可以使用的其他表,将有一种更有效的方法吗?

2 个答案:

答案 0 :(得分:1)

如果您在salesdate上有一个索引,那可能很好。

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

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

尤其应该使用salesdate上的索引。

如果有多行,请使用top 1 with ties

答案 1 :(得分:1)

获取 top n 的另一种(更灵活的)方法是利用OLAP功能:

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

这将返回带有最大日期的 all 行。如果只希望其中一个切换到ROW_NUMBER。