last_value window 함수가 제대로 작동하지 않습니다.
Last_value
창 기능doesn't
제대로 일을 하다
CREATE TABLE EXAMP2
(
CUSTOMER_ID NUMBER(38) NOT NULL,
VALID_FROM DATE NOT NULL
);
Customer_id Valid_from
-------------------------------------
9775 06.04.2013 01:34:16
9775 06.04.2013 20:34:00
9775 12.04.2013 11:07:01
--------------------------------------
select DISTINCT LAST_VALUE(VALID_FROM)
OVER (partition by customer_id ORDER BY VALID_FROM ASC) rn
from examp1;
사용할때LAST_VALUE
그러면 다음 행이 나옵니다.
06.04.2013 20:34:00
06.04.2013 01:34:16
12.04.2013 11:07:01
사용할때FIRST_VALUE
그러면 다음 행이 나옵니다.
select DISTINCT FIRST_VALUE(VALID_FROM)
OVER (partition by customer_id ORDER BY VALID_FROM DESC) rn
from examp1;
4/12/2013 11:07:01 AM
First_value
쿼리는 올바른 출력을 제공합니다.저는 이 질문들에서 같은 결과물을 얻기를 희망했습니다.왜 나는2 different results
?
분석 함수에서는 창 범위를 지정해야 합니다.기본적으로 다음과 같습니다.between unbounded preceding and current row
, 스스로 설명할 수 있는 일이라고 생각합니다
기본적으로, 이것은 당신이 특정할 때 발생하는 것입니다.partition by customer_id order by valid_from asc
:
- Oracle은 현재 행과 일치하는 모든 행을 가져옵니다.
customer id
- 그들에게 오름차순으로 명령합니다.
valid_from
- 최소값으로 시작하는 창을 형성합니다.
valid_from
날짜, 현재 행으로 끝맺음valid_from
. - 평가합니다.
last_value
, 현재 행의 값을 반환합니다.valid_from
.
진행 중인 범위를 지정해야 합니다.
16:53:00 SYSTEM@sandbox> ed
Wrote file S:\spool\sandbox\BUFFER_SYSTEM_38.sql
1 select last_value(VALID_FROM) OVER (
2 partition by customer_id
3 ORDER BY VALID_FROM asc
4 range between current row and unbounded following
5 ) rn
6* from t
16:53:21 SYSTEM@sandbox> /
RN
---------------------------------------------------------------------------
04-DEC-13 11.07.01.000000 AM
04-DEC-13 11.07.01.000000 AM
04-DEC-13 11.07.01.000000 AM
Elapsed: 00:00:00.01
first_value
그리고.last_value
작동할 창이 필요하다는 점에서 좀 특별합니다.
추가할 필요가 있습니다.ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
다음과 같이
select DISTINCT LAST_VALUE(VALID_FROM) OVER (partition by customer_id
ORDER BY VALID_FROM ASC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) rn
from examp1;
문서: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions001.htm#i81407 을 참조하고 특히 윈도우 설정에 대한 섹션을 읽으십시오.
windowing 절을 허용하는 함수의 기본 절은 다음과 같습니다.RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
그래서 한 주문은 작동하지만 다른 주문은 작동하지 않는 이유를 설명해 줍니다!기본 절은 창을 지정할 필요 없이 실행 총 유형 계산을 쉽게 수행할 수 있도록 설정됩니다.
언급URL : https://stackoverflow.com/questions/16274362/last-value-window-function-doesnt-work-properly
'programing' 카테고리의 다른 글
두 개의 열을 사용하여 데이터 피벗 (0) | 2023.10.31 |
---|---|
주어진 중단점에 도달할 때까지 GDB에서 실행되는 모든 행을 자동으로 인쇄하는 방법은 무엇입니까? (0) | 2023.10.31 |
TextReader 대신 문자열에서 역직렬화 (0) | 2023.10.31 |
SQL: 여러 테이블에서 조합 선택 개수(*) (0) | 2023.10.31 |
mysql의 테이블에서 N개의 레코드를 선택하는 방법 (0) | 2023.10.31 |