Oracle Analytic Functions의 윈도우 조항에서 "현재 행"과 "0 Preceding/Follow"의 차이점은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/379643

  •  22-08-2019
  •  | 
  •  

문제

Oracle의 분석 기능 중 일부는 a 창문 조항 현재 파티션의 하위 집합을 지정하려면 "미리/팔로우", "현재 행"또는 "value_expr premer/follow"와 같은 키워드를 사용하여 value_expr이 현재 행 또는 값의 물리적 또는 논리적 오프셋입니다 ( 각각 행 또는 범위를 지정했습니다).

다음은 Scott/Tiger를 사용하는 예입니다.

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 Preceding/Follow"와 다른 예제 또는 문서를 제공 할 수 있습니까? 나에게 구문 설탕처럼 보인다 ...

도움이 되었습니까?

해결책

당신이 사용하는 것은 중요하지 않습니다. 윈도우를 표현하는 두 가지 방법이지만 Optimizer는 쿼리를 동일한 방식으로 수행합니다. "현재 행"이라는 용어는 Oracle뿐만 아니라 분석 기능이있는 여러 데이터베이스에 공통적 인 용어입니다. 일부 사람들이 카운트보다 (*)를 선호하는 것과 같은 방식으로 스타일 차이에 가깝습니다 (1).

다른 팁

내가 핸드 해야하는 Oracle 문서 (Oracle 9.2)는 다음과 같이 말합니다.

범위를 지정한 경우 :

  • value_expr은 논리적 오프셋입니다. 양의 숫자 값 또는 간격 문자로 평가하는 일정한 또는 표현이어야합니다.

이것은 긍정적 인 숫자 값이 아니기 때문에 실제로 0을 사용해서는 안된다는 것을 의미합니다. 그러나 분명히 당신이 이후로/팔로우를 사용하는 것이 가능합니다.

그것은 당신이 성취하려는 것에 관한 것입니다. 서브 세트 내에서 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