我刚刚开始深入研究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的数据类型有关吗?
答案 0 :(得分:3)
首先,'?'是什么?在这做什么?
这是一个错误;它应该是-
(减号)。我猜测Basu将他的Oracle脚本复制并粘贴到一个程序中,该程序将ASCII减号无声地转换为Unicode en dash,并从那里进入一个程序,将非ASCII字符静默转换为?
。
其次,如何实际计算DAY_GAP?查询如何知道根据此查询计算天数差异?它与hiredate的数据类型有关吗?
见前;一旦你把它写成hiredate - FIRST_VALUE(hiredate) OVER (...)
,它就会突然变得有意义! : - )