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
운영게시판
최근게시물
MS-SQL Q&A 7195 게시물 읽기
No. 7195
초보질문
작성자
ohyouknow(ohyouknow)
작성일
2019-11-01 15:26ⓒ
2019-11-01 15:28ⓜ
조회수
226

즐거운 주말입니다.

좋은 시간 되시길 바랍니다.

다음과 같은 테이블 정보가 있습니다.

com_tran.C1_MVPI2500                                                                                                      

MVPI2500_id SEQNO HNC_CD FLG_SEQ   MVPI2500_id SEQNO HNC_CD FLG_SEQ
1 48912845 LE41395830 11   1 48912845 LE41395830 11
2 48912846 LE41395830 12   2 48912846 LE41395830 12
3 48912847 LE41395830 13   3 48912847 LE41395830 13
4 48912848 LE41395830 14   5 48912849 LE41395830 14
5 48912849 LE41395830 14          

HNC_CD,  FLG_SEQ를 키로 최대SEQNO값을 기본으로 오른쪽과 같은 데이터를 추출 하려 합니다.

이에 다음과 같은 SQL을 작성 했습니다.

이보다 심플한 SQL이 가능 한가요

select MVPI2500_id,main.SEQNO,  main.HNC_CD,  main.FLG_SEQ
  from com_tran.C1_MVPI2500 main  INNER JOIN
         (SELECT MAX(SEQNO) SEQNO,  HNC_CD,  FLG_SEQ
             FROM com_tran.C1_MVPI2500 where SEQNO BETWEEN 48912800 AND 48912900 GROUP BY HNC_CD,  FLG_SEQ
         ) sub
  ON main.SEQNO = sub.SEQNO
  AND main.HNC_CD = sub.HNC_CD

 

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

거의 비슷한데..아래처럼 해봤습니다.

select mvpi2500_id, seqno, hnc_cd, flg_seq
from (select mvpi2500_id, seqno, hnc_cd, flg_seq, row_number() over (partition by hnc_cd,flg_seq order by seqno desc) as rownum
from c1_mvpi2500) a
where a.rownum=1
정상규(pajama)님이 2019-11-01 17:06에 작성한 댓글입니다.

SEQNO 가 중복된 값을 가질 수 있느냐 없느냐에 따라

쿼리 최적화가 달라질 수 있습니다.

박인호(paerae)님이 2019-11-01 18:01에 작성한 댓글입니다.

SEQNO 값이 중복된 값을 가진다면

seqno에 index를 생성하는 방법 정도가 최선일 것으로 보입니다.

* 단 해당 컬럼의 분산이 충분히 커야 합니다.

index 생성 권한 및 변경에 대한 책임을 질 수 있는 위치에 있어야 겠죠.

책임질 위치에 없으면 위에 보고해서 전문가의 도움을 받는 것이 좋습니다.

박인호(paerae)님이 2019-11-04 12:51에 작성한 댓글입니다.
이 댓글은 2019-11-04 12:51에 마지막으로 수정되었습니다.

정상규님, 박인호님

두분 댓글 감사 드립니다.

아주 많은 도움이 되었습니다.

현재 SEQNO는 중복 값을 가지고 있지 않습니다.

그래서 박인호님이 조언 하신대로 인댁스를 작성하려 합니다.

정성규님이 조언 하신대로도 작성해 보고 빠른 쪽을 선택 하려 합니다.

바쁘신 중에 관심 가져주셔서 감사드립니다.

 

ohyouknow(ohyouknow)님이 2019-11-04 22:57에 작성한 댓글입니다.

seqno가 중복값을 가지고 있지 않으면

index 생성하시고

아래와 같이 해당 테이블을 한번만 조회하도록 수정할 수 있습니다.

 

원쿼리

SELECT MAX(MVPI2500_id) MVPI2500_id, mid.HNC_CD, mid.FLG_SEQ   FROM com_tran.C1_MVPI2500 mid
INNER JOIN 
(SELECT MAX(SEQNO) SEQNO,  HNC_CD,  FLG_SEQ    FROM com_tran.C1_MVPI2500    WHERE SEQNO > 10000000 AND SEQNO <= 11000000 GROUP
                     BY HNC_CD,  FLG_SEQ
     ) mseq
        ON mid.SEQNO = mseq.SEQNO  WHERE UPD_KB = 'I'  GROUP BY   mid.HNC_CD,mid.FLG_SEQ
 

수정쿼리

SELECT *
FROM (
	SELECT mvpi2500_id, seqno, hnc_cd, flg_seq 
		 ,ROW_NUMBER() OVER(PARTITION BY hnc_cd,flg_seq ORDER BY seqno DESC) as rownum
	FROM com_tran.C1_MVPI2500
	WHERE SEQNO > 10000000 AND SEQNO <= 11000000
	AND UPD_KB = 'I'
) t
WHERE rownum=1 
박인호(paerae)님이 2019-11-05 09:47에 작성한 댓글입니다.
이 댓글은 2019-11-05 09:48에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
7198가로 컬럼을 세로로 조회 하는 방법 [1]
한번 더 도와주세요ㅜㅜ
2019-12-13
21
7197도와 주세요.... 모르겠어요...ㅜㅜ [2]
도와주세요ㅜㅜ
2019-12-02
91
7195초보질문 [5]
ohyouknow
2019-11-01
226
7194sub query [4]
ohyouknow
2019-10-30
168
7193(초보질문)주문상품에 따른 그룹주문만들기? 고수분들. 꼭 한번 봐주세요. 부탁드립니다. [2]
추노
2019-10-17
210
7191스페이스 문자 인식을 못할때가 있어요. [1]
바람날개
2019-10-03
234
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.286초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다