sql - 高效查找表中的最后日期 - 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 是一个大表,如果没有另一个我可以使用的表,是否有更有效的方法来做到这一点?
解决方案
另一种(更灵活)获得前 n 名的方法是利用 OLAP 函数:
SELECT *
FROM Sales s
QUALIFY
RANK() OVER (ORDER BY SalesDate DESC) = 1
这将返回具有最大日期的所有行。如果您只想要其中一个,请切换到 ROW_NUMBER。
推荐阅读
- java - 调用比较器对 JList 中的元素进行排序
- javascript - Vue.js 动态使用字符串
- java - SOAP 请求数据不会发送到 SpringBoot 中的外部系统
- python - 并发期货等待任务子集
- java - 在每次 REST 调用中丢失会话
- javascript - Javascript 和 jquery 由于某种原因无法工作
- ignite - Session.removeAttribute 未按预期工作
- powershell - Register-Scheduledjob 创建一个作业,但它从不在启动时运行
- imageresizer - .Net Core 中的图像调整器
- reactjs - 在进行条件渲染时反应原生变量赋值?