之间的任何差别"流行"和"0前/后"在窗口条款的Oracle分析职能?
题
一些Oracle的分析功能允许 窗口条款 指定一个子集中的电流分区,使用关键词,如"无限的前/后","当前行",或"value_expr前/后"凡value_expr是一个物理或逻辑偏离现行或价值的(这取决于你是否有指定的行或范围内,分别)。
这里是一个例子使用科特/虎显示的雇员在科30和数量的雇员在他们的部雇用在他们之前(包括他们自己):
select deptno,
empno,
hiredate,
count(*) over (partition by deptno
order by hiredate
range between unbounded preceding and current row) cnt_hired_before1,
count(*) over (partition by deptno
order by hiredate
range between unbounded preceding and 0 preceding) cnt_hired_before2
from emp
where deptno = 30
order by deptno, hiredate;
...任何人都可以提供一个例子或文件的"现行"不同于"0前/后"?它似乎只是语法糖我...
解决方案
这其实并不重要,您使用。他们表达了窗口的两种不同的方式,但优化器将执行查询的方式相同。术语“当前行”是一个很常见到多个数据库与分析功能,而不仅仅是甲骨文。它更像是一个风格的差异,以同样的方式,有些人更喜欢计数COUNT(*)(1)。
其他提示
Oracle文件,我已经到手(Oracle9.2)说:
如果你指定的范围:
- value_expr是一个合乎逻辑的偏移。它必须是一个不断或表达式 计算结果为正值数字 或者间隔的文字。
这意味着你不应该真的应用0因为它不是一个正数值。但是,很明显的是,可以使用0前/后由于你。
这是所有关于你要完成的任务。 您可能需要使用BETWEEN /使用行之间RANGE到一个子集内的子集或比较不同的事物中找到LAST_VALUE。但是肯定你不需要为您提供的例子。
select deptno,
empno,
hiredate,
count(*) over (partition by deptno, trunc(hiredate,'mm')) cnt_same_month
from emp
where deptno = 30
order by deptno, hiredate
不隶属于 StackOverflow