一些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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top