分析函数FIRST_VALUE如何在SQL中工作

时间:2012-10-04 17:37:06

标签: sql analytic-functions

我刚刚开始深入研究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的数据类型有关吗?

1 个答案:

答案 0 :(得分:3)

  

首先,'?'是什么?在这做什么?

这是一个错误;它应该是-(减号)。我猜测Basu将他的Oracle脚本复制并粘贴到一个程序中,该程序将ASCII减号无声地转换为Unicode en dash,并从那里进入一个程序,将非ASCII字符静默转换为?

  

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

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