programing

last_value window 함수가 제대로 작동하지 않습니다.

stoneblock 2023. 10. 31. 20:25

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:

  1. Oracle은 현재 행과 일치하는 모든 행을 가져옵니다.customer id
  2. 그들에게 오름차순으로 명령합니다.valid_from
  3. 최소값으로 시작하는 창을 형성합니다.valid_from날짜, 현재 행으로 끝맺음valid_from.
  4. 평가합니다.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