database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41841 게시물 읽기
No. 41841
간단한듯 어려운 쿼리문제 도와주세요(전일자 데이터와 비교해서 행보여주기)
작성자
로방뿡(92jaewon)
작성일
2021-02-10 13:46ⓒ
2021-02-10 13:50ⓜ
조회수
2,462

SELECT 기준일자

         , 코드

         , 코드명

         , 값

  FROM DATA_TABLE

WHERE 기준일자 IN (:기준일자_인풋, 기준일자-1)

-----------------------------------------------------



기준일자, 코드, 크드명, 값

으로 화면에 보여줘야 하는데 

코드는 같은데 코드명이 전일자 코드명과 다른경우가 있습니다.

그런 경우에는 기준일자의 행만을 보여줘야 합니다


도저히 쿼리로 생각이 나질 않습니다..

도와주세요 ㅠㅠ

이 글에 대한 댓글이 총 3건 있습니다.

기준일자 컬럼 및 :기준일자 변수의 데이터 타입 및 포멧이 어떻게 되나요?

예시자료 보여주실 수 있나요? 원본 대비 결과표 예시.

마농(manon94)님이 2021-02-16 10:21에 작성한 댓글입니다.

기준일자 포맷: YYYYMMDD 


아래는 DATA_TABLE 의 데이터입니다

코드 C가 기준일자 20210208에 제육볶음에서 된장찌개로 바뀝니다.

기준일자 20210207의 경우는 전일자인 20210206에서도 제육볶음이기때문에

기준일자 데이터와 전일자 데이터를 다보여줘야 하지만

기준일자 20210208에서는 코드가 C인 데이터의 전일자 코드명이 다르므로

기준일자 데이터만 보여줘야 합니다.

-----------------------------------------------

기준일자        코드     코드명          값

20210208         A       백반            5000

20210208         B       김치찌개      6000

20210208         C       된장찌개      6000


20210207         A       백반            6000

20210207         B       김치찌개      7000

20210207         C       제육볶음      6000


20210206         A       백반            6000

20210206         B       김치찌개      7000

20210206         C       제육볶음      6000

로방뿡(92jaewon)님이 2021-02-17 11:21에 작성한 댓글입니다.
이 댓글은 2021-02-17 11:22에 마지막으로 수정되었습니다.
-- 분석함수 --
SELECT 기준일자, 코드, 코드명, 값
  FROM (SELECT 기준일자, 코드, 코드명, 값
             , LAG(코드명) OVER(PARTITION BY 코드 ORDER BY 기준일자 DESC) x
          FROM data_table
         WHERE 기준일자 IN ( :v_dt
                          , TO_CHAR(TO_DATE(:v_dt, 'yyyymmdd')-1, 'yyyymmdd')
                          )
        )
 WHERE 기준일자 = :v_dt
    OR 코드명 = x
 ORDER BY 기준일자 DESC, 코드
;

-- 계층쿼리 --
SELECT 기준일자, 코드, 코드명, 값
  FROM data_table
 START WITH 기준일자 = :v_dt
 CONNECT BY PRIOR 코드 = 코드
   AND PRIOR 코드명 = 코드명
   AND PRIOR TO_CHAR(TO_DATE(기준일자, 'yyyymmdd')-1, 'yyyymmdd') = 기준일자
   AND LEVEL <= 2
 ORDER BY 기준일자 DESC, 코드
;
마농(manon94)님이 2021-02-22 10:00에 작성한 댓글입니다.
이 댓글은 2021-02-22 10:01에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
41844오라클 동적 쿼리시 %rowtype 바인딩 변수 에러
Felix
2021-03-03
2414
41843합계, 총합계표현 [4]
선이
2021-02-22
2837
41842오라클 딕셔너리 뷰끼리의 조인시, 조회속도 관련 문제...
이재현
2021-02-14
2137
41841간단한듯 어려운 쿼리문제 도와주세요(전일자 데이터와 비교해서 행보여주기) [3]
로방뿡
2021-02-10
2462
41840대용량 오라클 이중화 환경 서브노드 배치서버 이용 [1]
kkubee
2021-02-02
1962
41839like like2 like4 likec 각각 활용용도 [1]
일산탄
2021-01-21
2099
41838오라클 SE RAC 구성 [6]
이규영
2021-01-18
2197
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다