【问题标题】:How does the analytic function FIRST_VALUE work in SQL解析函数 FIRST_VALUE 在 SQL 中是如何工作的
【发布时间】:2012-10-04 17:37:06
【问题描述】:

我刚刚开始深入研究 SQL 分析函数,对 FIRST_VALUE 有点悬念,也许它只是针对来自this 站点的示例查询:

-- How many days after the first hire of each department were the next
-- employees hired?

SELECT empno, deptno, hiredate ? FIRST_VALUE(hiredate)
OVER (PARTITION BY deptno ORDER BY hiredate) DAY_GAP
FROM emp
WHERE deptno IN (20, 30)
ORDER BY deptno, DAY_GAP;

 EMPNO     DEPTNO    DAY_GAP
---------- ---------- ----------
  7369         20          0
  7566         20        106
  7902         20        351
  7788         20        722
  7876         20        756
  7499         30          0
  7521         30          2
  7698         30         70
  7844         30        200
  7654         30        220
  7900         30        286

我正在努力处理这个查询的两个部分。首先,什么是“?”在这里做什么?我以前只看到它用于参数化查询。其次,DAY_GAP 实际是如何计算的?查询如何知道根据此查询计算天数差?和hiredate的数据类型有关系吗?

【问题讨论】:

    标签: sql analytic-functions


    【解决方案1】:

    首先,“?”是什么?在这儿干吗?

    这是一个错误;它应该是-(减号)。我猜巴苏将他的 Oracle 成绩单复制并粘贴到一个程序中,该程序将 ASCII 减号静默转换为 Unicode 破折号,然后从那里进入一个将非 ASCII 字符静默转换为? 的程序。

    其次,DAY_GAP 实际是如何计算的?查询如何知道根据此查询计算天数差异?和hiredate的数据类型有关系吗?

    见上;一旦你把它写成hiredate - FIRST_VALUE(hiredate) OVER (...),它突然变得有意义了! :-)

    【讨论】:

    • 是的,- 确实更有意义。谢谢!
    猜你喜欢
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多