【问题标题】:Oracle LAG/LEAD analytic functions works as join or not?Oracle LAG/LEAD 分析函数是否作为连接工作?
【发布时间】:2014-07-16 07:28:57
【问题描述】:

lag/lead 分析函数允许在没有连接技术的情况下根据官方文档访问上一行/下一行:

这是否意味着如果我包含不是滞后/领先的字段 - Oracle 会加入这些字段?

所以如果我查询货币汇率(寻找漏洞 - 没有定义汇率的那一天):

 select CURRENCY, RATE, XDATE, lead(XDATE) over (order by XDATE) from CURRENCY_RATE

我以与 XDATE 相同的 CURRENCY 获得 lead(XDATE)

或者 lead 表达式中的 partition by 关键字必须在 CURRENCY 上使用才能实现此目标?

【问题讨论】:

    标签: oracle


    【解决方案1】:

    我在http://www.orafaq.com/node/55 中找到了解析函数语义的很好解释:

    • 某些函数支持分区内的 window_clause 以进一步限制它们作用的记录。在没有任何 window_clause 的情况下,对分区子句的所有记录计算分析函数。

    • 函数SUM、COUNT、AVG、MIN、MAX是常用的分析函数,其结果不依赖于记录的顺序。

    • LEAD、LAG、RANK、DENSE_RANK、ROW_NUMBER、FIRST、FIRST VALUE、LAST、LAST VALUE 等函数取决于记录的顺序。

    另一个不错的文档:http://www.oracle-base.com/articles/misc/analytic-functions.php

    【讨论】:

      【解决方案2】:

      您的查询在不考虑货币的情况下取得领先。 如果要按日期对任何货币进行排序,则需要按关键字添加分区:

      select CURRENCY,
             RATE,
             XDATE,
             lead(XDATE) over(partition by CURRENCY order by XDATE)
        from CURRENCY_RATE
      ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        • 2020-11-13
        相关资源
        最近更新 更多