조회결과 내가원하는 조건의 위아래 값을 알고싶을때가있다.
예를들어 게시글의 상세보기중 이전글,다음글을 현재 페이지에서 링크걸떄, 이전글과 다음글의 글번호를 알고싶다고하면
어떻게 가져올수있을까?
LAG
LAG함수를 사용하면 이전ROW의 데이터를 알 수 있다.
사용법은 아래와같다.
LAG(REGION_ID) OVER (ORDER BY REGION_ID)
아래 테이블의 각 행마다 이전행의 데이터를 가져오고싶을떄, LAG를 사용하여 가져올 수 있다.
SELECT * FROM REGIONS ORDER BY REGION_ID | cs |
SELECT REGION_ID,
REGION_NAME,
LAG(REGION_ID) OVER (ORDER BY REGION_ID) 이전행ID,
LAG(REGION_NAME) OVER (ORDER BY REGION_ID) 이전행NAME
FROM REGIONS
ORDER BY REGION_ID
각 ROW마다 이전 REGION_ID를 가져왔다, 이때 내가원하는 행의 이전로우만 알고싶다면 아래와같이 서브쿼리를 사용하면 된다.
SELECT *
FROM(
SELECT REGION_ID,
REGION_NAME,
LAG(REGION_ID) OVER (ORDER BY REGION_ID) 이전행ID,
LAG(REGION_NAME) OVER (ORDER BY REGION_ID) 이전행NAME
FROM REGIONS
ORDER BY REGION_ID
)
WHERE REGION_ID = '3'
LEAD
LEAD함수를 사용하면 다음ROW의 데이터를 알 수 있다.
사용법은 아래와같다.
LEAD(REGION_ID) OVER (ORDER BY REGION_ID)
LAG와 같은 방법으로 사용 할 수 있다.
SELECT REGION_ID, REGION_NAME, LEAD(REGION_ID) OVER (ORDER BY REGION_ID) 다음행ID, LEAD(REGION_NAME) OVER (ORDER BY REGION_ID) 다음행NAME FROM REGIONS ORDER BY REGION_ID | cs |
각행의 다음 값을 가져올 수 있다.
내가원하는 ROW의 다음값 가져오기.
SELECT * FROM( SELECT REGION_ID, REGION_NAME, LEAD(REGION_ID) OVER (ORDER BY REGION_ID) 다음행ID, LEAD(REGION_NAME) OVER (ORDER BY REGION_ID) 다음행NAME FROM REGIONS ORDER BY REGION_ID ) WHERE REGION_ID = '3' | cs |
'DB\SQL' 카테고리의 다른 글
[Oracle] 조건에 따른 값변경(CASE문 사용법) (1) | 2019.08.05 |
---|---|
[Oracle]SELECT 합치기-유니온(UNION,UNION ALL) (4) | 2019.03.13 |
[Oracle]오라클 데이터타입 변경(TO_CHAR,TO_NUMBER,TO_DATE) (0) | 2019.03.11 |
[Oracle]오라클 AS별칭(Alias) 숫자로 주기 (0) | 2019.03.04 |
[Oracle]그룹핑시 행 겹치기(LISTAGG) (0) | 2019.02.28 |