2

我刚刚开始深入研究 SQL 分析函数,对 FIRST_VALUE 有点着迷,也许它只是特定于站点的示例查询:

-- 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的数据类型有关系吗?

4

1 回答 1

3

首先,什么是“?” 在这里做什么?

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

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

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

于 2012-10-04T17:43:26.667 回答