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 41848 게시물 읽기
No. 41848
테이블 조인 후 그룹별로 묶어서 그룹별 상위 1개씩 출력하고 싶습니다
작성자
노진규(nojinkyu)
작성일
2021-05-06 20:28ⓒ
2021-05-07 01:39ⓜ
조회수
2,513

A.EQSTCD를 그룹별로 묶어서 그룹별 A.APCSEQ가 가장 높은 순서대로 정렬하였고 그룹별 NUMBER의 1번만 출력하고 싶습니다.

단일 테이블에서는 되는데, 테이블을 조인하다보니 결과값이 안나오네요.

도움 부탁드립니다.


원하는 결과값

A.APCSEQ    A.EQSTCD      B.EQSTCD       A.LGTCOR     B.LTCOLR      A.INSNUM       NUMBER

10003970     04LLED0119    04LLED0119    10               (null)           F151354          1

10006824     10L2500040    10L2500040    12               (null)           C180108          1

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

쿼리문

SELECT A.APCSEQ, A.EQSTCD, B.EQSTCD, A.LGTCOR, B.LTCOLR, A.INSNUM,

ROW_NUMBER() OVER(PARTITION BY A.EQSTCD ORDER BY A.APCSEQ desc) NUMBER

FROM INSA A, EQU B, LIGHT C

WHERE A.EQSTCD=B.EQSTCD(+)

AND C.LTSTCD=B.EQSTCD

AND B.EQUGBN='10'

AND B.USEEDT='99991231'

AND B.LTCOLR IS NULL

AND B.EQSTCD IN ('10L2500039','10L2500040');

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

쿼리문 결과값

A.APCSEQ    A.EQSTCD      B.EQSTCD       A.LGTCOR     B.LTCOLR      A.INSNUM       NUMBER

10003970    10L2500039    10L2500039    10               (null)            F151354          1

10001581    10L2500039    10L2500039    10               (null)            F120722          2

10001543    10L2500039    10L2500039    10               (null)            F120687          3

10000967    10L2500039    10L2500039    10               (null)            F110704          4

10006824    10L2500040    10L2500040    12               (null)            C180108          1

10004659    10L2500040    10L2500040    10               (null)            F160584          2

10002071    10L2500040    10L2500040    10               (null)            F130504          3

10000462    10L2500040    10L2500040    10               (null)            B100466          4

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

안녕하세요. 한번 감싸면 되지 않을까요..?



SELECT * 

FROM (

SELECT A.APCSEQ, A.EQSTCD, B.EQSTCD, A.LGTCOR, B.LTCOLR, A.INSNUM,

ROW_NUMBER() OVER(PARTITION BY A.EQSTCD ORDER BY A.APCSEQ desc) NUMBER

FROM INSA A, EQU B, LIGHT C

WHERE A.EQSTCD=B.EQSTCD(+)

AND C.LTSTCD=B.EQSTCD

AND B.EQUGBN='10'

AND B.USEEDT='99991231'

AND B.LTCOLR IS NULL

AND B.EQSTCD IN ('10L2500039','10L2500040');

)

WHERE NUMBER = 1

정상규(pajama)님이 2021-05-06 21:42에 작성한 댓글입니다.
이 댓글은 2021-05-06 21:43에 마지막으로 수정되었습니다.
아우터조인 기호(+) 필요 없습니다.
NUMBER 와 같은 예약어 사용은 지양해야 합니다.
c 는 왜 조인하죠? 필요 없어 보이는데?

SELECT *
  FROM (SELECT a.apcseq, a.eqstcd, b.eqstcd, a.lgtcor, b.ltcolr, a.insnum
             , ROW_NUMBER() OVER(PARTITION BY a.eqstcd ORDER BY a.apcseq DESC) rn
          FROM insa  a
             , equ   b
        --     , light c
         WHERE a.eqstcd = b.eqstcd
        --   AND c.ltstcd = b.eqstcd
           AND b.equgbn = '10'
           AND b.useedt = '99991231'
           AND b.ltcolr IS NULL
           AND b.eqstcd IN ('10L2500039','10L2500040')
        ) d
 WHERE rn = 1
;
마농(manon94)님이 2021-05-07 09:54에 작성한 댓글입니다.
이 댓글은 2021-05-07 09:59에 마지막으로 수정되었습니다.

장상규님.

알려주신대로 해보니 "열의 정의가 애매합니다" 오류가 발생해서

a.eqstcd as aeqtcd와 같이 별칭을 붙이니 잘 되는군요.

조인할 때 a. b.으로 구분했는데도 인식 못해서 별칭을 붙였습니다.

그룹별 상위n개 출력 잘 됩니다.

감사합니다.

노진규(nojinkyu)님이 2021-05-07 12:25에 작성한 댓글입니다.
이 댓글은 2021-05-07 12:26에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
41852오라클 19c(윈도우즈용 x64) 설치 에러!!!
신승익
2021-05-24
2749
41851전체 테이블에서 특정 데이터 검색 [1]
노진규
2021-05-18
8232
41849파티션 테이블 잘라내기(월간 -> 일간) 문의 [2]
세션
2021-05-14
2563
41848테이블 조인 후 그룹별로 묶어서 그룹별 상위 1개씩 출력하고 싶습니다 [3]
노진규
2021-05-06
2513
41847오라클 계정 생성 질문입니다.
박승우
2021-04-13
2663
41844오라클 동적 쿼리시 %rowtype 바인딩 변수 에러
Felix
2021-03-03
2435
41843합계, 총합계표현 [4]
선이
2021-02-22
2860
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.052초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다