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
운영게시판
최근게시물
DB2 Q&A 898 게시물 읽기
No. 898
입고일자가 최근의 데이터만 빼오려고 합니다.
작성자
jae(sneeze)
작성일
2005-12-23 13:21ⓒ
2005-12-23 13:21ⓜ
조회수
6,623

초보입니다.

다음과 같은 쿼리가 있는데, 문제는 A.IO_INVOICE_NO(송장번호)가 작년 것과 같은 것들이

들어옵니다. 그래서 결국 WHERE 절에 임시방편으로 ENT_DT(입고일자) >= '20050100'

을 넣었습니다만 내년에 또 데이터가 꼬일건 뻔하거든요.. 그래서 ENT_DT 가 최근인 데이터들만

빼오려고 합니다. 가장 최근의 송장번호에 관련된 데이터만 제품마스터(DL_PRDMST)에서 빼올

수 있게 수정 좀 부탁드립니다.. PK는 PRD_NO 입니다...

 

SELECT A.PRD_NO "PRD_NO",
A.PRD_CD "PRD_CD",
A.ENTER_DT "ENTER_DT",
A.ENTER_TM "ENTER_TM",
A.O_INVOICE_NO "O_INVOICE_NO",
'' "CHK1",
'' "SELECTED",
B.CAR_NO "CAR_NO",
B.CAR_ENO "CAR_ENO",
C.DEST_NM "F_DEST_NM",
D.DEST_NM "T_DEST_NM",
E.CUST_NM "CUST_NM",
F.COMMON_NM "PRD_NM",
G.CUST_NM "BILL_TO_NM",
F.COMMON_SUB_CD "COMMON_SUB_CD",
'' "ADD_GBN",
B.MAIN_DRIVER_NO "MAIN_DRIVER_NO",
B.MAIN_DRIVER_NM "MAIN_DRIVER_NM",
B.SPAIR_DRIVER_NO "SPAIR_DRIVER_NO",
B.SPAIR_DRIVER_NM "SPAIR_DRIVER_NM"
FROM DL_PRDMST A

left outer join DL_CAR B on A.ENTER_CAR_CO_GBN = B.TRANS_CO_GBN

AND A.ENTER_CAR_CO_CD = B.TRANS_CO_CD AND A.ENTER_CAR_SNO = B.CAR_SNO
left outer join DL_DESTMST C on A.F_DEST_CD = C.DEST_CD
left outer join DL_DESTMST D on A.T_DEST_CD = D.DEST_CD
left outer join DL_CUST E on A.PCUST_NO = E.CUST_NO
left outer join DL_COMMON F on A.PRD_CD = F.COMMON_CD
left outer join DL_CUST G on A.BILL_TO_CD = G.CUST_NO
WHERE F.COMMON_GBN = 'J' AND
A.ENTER_DT >= '20050100' AND --> 임시방편의 조건..

A.I_INVOICE_NO = :v_invoice_no;

 


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

SELECT A.PRD_NO PRD_NO,
       A.PRD_CD PRD_CD,
       A.ENTER_DT ENTER_DT,
       A.ENTER_TM ENTER_TM,
       A.O_INVOICE_NO O_INVOICE_NO,
       '' CHK1,
       '' SELECTED,
       B.CAR_NO CAR_NO,
       B.CAR_ENO CAR_ENO,
       C.DEST_NM F_DEST_NM,
       D.DEST_NM T_DEST_NM,
       E.CUST_NM CUST_NM,
       F.COMMON_NM PRD_NM,
       G.CUST_NM BILL_TO_NM,
       F.COMMON_SUB_CD COMMON_SUB_CD,
       '' ADD_GBN,
       B.MAIN_DRIVER_NO MAIN_DRIVER_NO,
       B.MAIN_DRIVER_NM MAIN_DRIVER_NM,
       B.SPAIR_DRIVER_NO SPAIR_DRIVER_NO,
       B.SPAIR_DRIVER_NM SPAIR_DRIVER_NM
FROM (
SELECT A.PRD_NO PRD_NO,
       A.PRD_CD PRD_CD,
       A.ENTER_DT ENTER_DT,
       A.ENTER_TM ENTER_TM,
       A.O_INVOICE_NO O_INVOICE_NO,
       ROWNUMBER() OVER(ORDER BY A.ENTER_DT DESC) RN
  FROM DL_PRDMST A
 WHERE A.I_INVOICE_NO = :v_invoice_no
     ) A
       left outer join DL_CAR B on A.ENTER_CAR_CO_GBN = B.TRANS_CO_GBN
          AND A.ENTER_CAR_CO_CD = B.TRANS_CO_CD
          AND A.ENTER_CAR_SNO = B.CAR_SNO
       left outer join DL_DESTMST C on A.F_DEST_CD = C.DEST_CD
       left outer join DL_DESTMST D on A.T_DEST_CD = D.DEST_CD
       left outer join DL_CUST E on A.PCUST_NO = E.CUST_NO
       left outer join DL_COMMON F on A.PRD_CD = F.COMMON_CD
 WHERE RN=1
   AND F.COMMON_GBN = 'J';

대략님이 2005-12-23 14:54에 작성한 댓글입니다. Edit

먼저, 관심갖고 답변 달아주셔서 감사합니다.  검색을 통해

RANK() 란걸 알게 되어 님이 올려주신 답변 비슷하게 해봤었습니다.

( RANK()가 아니라 ROWNUMBER() 이었나요? )

그런데 어쨋든간 두개의 함수를 다 써봤는데 같은 에러가 납니다.

"C0195: SQLSTATE= 37000[IBM][CLIENT ACCESS EXPRESS ODBC

드라이버(32비트)[DB2/400 SQL]SQL0104 - TOKEN ( WAS NOT

VALID. VALID TOKENS: , FROM INTO.  "  이런 에러 메시지가 뜹니다

FROM 절 뒤에 괄호를 넣어서 그런거 같은데, 사실 기존의 다른 글

을 봐도 오라클에서도 이상없이 쓰는거 같은데 저만 그러네요..;;

참고로 DB는  DB2이고, 유틸은 파워빌더 8을 씁니다. 혹시 이 원인에

대해 아시는 분도 의견을 좀 부탁드리겠습니다.

메리 크리스마스..~~

 

jae(sneeze)님이 2005-12-23 15:18에 작성한 댓글입니다.

DB2/400 DB2에서는 OLAP Function이 안되는가봐여

db2 udb에서만 되는듯합니다.

먼저번에도 tocken에러가 나분이 있어요. 

글구 OLAP Function을 쓴다면 RANK가 맞습니다.

 

 

대략님이 2005-12-23 15:52에 작성한 댓글입니다. Edit

I_INVOICE_NO으로 두번 조회해도 별차이 없을거같은데여

 

SELECT A.PRD_NO PRD_NO,
       A.PRD_CD PRD_CD,
       A.ENTER_DT ENTER_DT,
       A.ENTER_TM ENTER_TM,
       A.O_INVOICE_NO O_INVOICE_NO,
       '' CHK1,
       '' SELECTED,
       B.CAR_NO CAR_NO,
       B.CAR_ENO CAR_ENO,
       C.DEST_NM F_DEST_NM,
       D.DEST_NM T_DEST_NM,
       E.CUST_NM CUST_NM,
       F.COMMON_NM PRD_NM,
       G.CUST_NM BILL_TO_NM,
       F.COMMON_SUB_CD COMMON_SUB_CD,
       '' ADD_GBN,
       B.MAIN_DRIVER_NO MAIN_DRIVER_NO,
       B.MAIN_DRIVER_NM MAIN_DRIVER_NM,
       B.SPAIR_DRIVER_NO SPAIR_DRIVER_NO,
       B.SPAIR_DRIVER_NM SPAIR_DRIVER_NM
FROM (
SELECT A.PRD_NO PRD_NO,
       A.PRD_CD PRD_CD,
       A.ENTER_DT ENTER_DT,
       A.ENTER_TM ENTER_TM,
       A.O_INVOICE_NO O_INVOICE_NO
  FROM DL_PRDMST A,
       (SELECT MAX(ENTER_DT) FROM DL_PRDMST WHERE I_INVOICE_NO = :v_invoice_no) B
 WHERE A.I_INVOICE_NO = :v_invoice_no
       A.ENTER_DT=B.ENTER_DT
     ) A
       left outer join DL_CAR B on A.ENTER_CAR_CO_GBN = B.TRANS_CO_GBN
          AND A.ENTER_CAR_CO_CD = B.TRANS_CO_CD
          AND A.ENTER_CAR_SNO = B.CAR_SNO
       left outer join DL_DESTMST C on A.F_DEST_CD = C.DEST_CD
       left outer join DL_DESTMST D on A.T_DEST_CD = D.DEST_CD
       left outer join DL_CUST E on A.PCUST_NO = E.CUST_NO
       left outer join DL_COMMON F on A.PRD_CD = F.COMMON_CD
 WHERE F.COMMON_GBN = 'J';

대략님이 2005-12-23 16:05에 작성한 댓글입니다. Edit

 

(SELECT MAX(ENTER_DT) FROM DL_PRDMST WHERE I_INVOICE_NO = :v_invoice_no) B
 WHERE A.I_INVOICE_NO = :v_invoice_no

=>

       (SELECT I_INVOICE_NO,MAX(ENTER_DT) FROM DL_PRDMST WHERE I_INVOICE_NO = :v_invoice_no group by I_INVOICE_NO) B
 WHERE A.I_INVOICE_NO = B.I_INVOICE_NO  

re님이 2005-12-23 16:23에 작성한 댓글입니다. Edit

답변 주신 모든 분께 감사드립니다.

덕분에 많이 배우고 갑니다.. HAPPY NEW YEAR~~

jae(sneeze)님이 2005-12-26 13:20에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
901급질문입니다. 산술식 [2]
이성훈
2005-12-28
5672
900LOCAL상에서 TCP/IP 프로토콜을 사용하는 인스턴스를 만들어보려고 합니다. [2]
초보
2005-12-28
6087
899DB2에서 링크서버 사용하려면...
강지훈
2005-12-28
5256
898입고일자가 최근의 데이터만 빼오려고 합니다. [6]
jae
2005-12-23
6623
897문자변환 Query 질문입니다.. [2]
김석
2005-12-21
8000
896Select 문에서 문자열 연결
김은희
2005-12-16
7124
895버전문의좀 할게요... 아시는분 답변부탁드립니다.
이성훈
2005-12-14
5168
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다