쿼리 도움부탁드립니다 0 4 1,218

by 정유석 [2017.03.20 16:43:13]


select  주문상품,
           주문자,
           주문지,
           바코드,
           min(주문일자),
           sum(수량),
           판매코드
from 과일가게 
    where to_char(주문일자, 'yyyymmdd') >= (select sysdate_A from 캘린더)--판매시작일 2017.03.20
        and 주문번호 like '02-7185%'
        and 주문상품 ='사과'
        group by 주문상품, 주문자, 주문지, 바코드, 판매코드
주문상품 주문자 주문지 바코드 주문일자 수량 판매코드
사과 홍길동 서울 A123456A 2017-04-03 150 A123456A_사과
사과 홍길동 서울 A123456B 2017-04-05 150 A123456B_사과

 

SQL 실행하여 나온 데이터입니다.

제가원하는건 주문일자 20170403만 나오게하고싶은데 우째해야할지 막막합니다

rank over를 사용해서 뽑으려고햇지만,

포도, 파인애플들도 저런 비슷한유형이잇어..어찌해야할지모르겟네요

도움 요청드립니다.

by 신이만든짝퉁 [2017.03.20 17:19:51]

select sysdate_A from 캘린더

위 테이블의 용도가 뭔지 모르겠습니다.

주문일자에 직접 날짜를 넣으면 될 것 같은데, 위 달력 테이블을 꼭 써야 하는 이유가 있나요?

WHERE 주문일자 between to_date('20170403', 'YYYYMMDD') and to_date('20170403 235959', 'YYYYMMDD HH24MISS')


by 정유석 [2017.03.20 17:25:58]

입고일 기준날짜를 정하려고 해놓앗어요

 


by 신이만든짝퉁 [2017.03.20 17:38:46]

and 주문일자 between to_date('20170403', 'YYYYMMDD') and to_date('20170403 235959', 'YYYYMMDD HH24MISS')

위와 같이 한줄만 추가해주시면 될 것 같습니다.

 

그리고 입고일 기준날짜를 테이블에 넣어서 코드로 관리해야 한다면, 아래와 같은 방식이 더 낫습니다.

캘린더 테이블에 데이터가 1건만 들어있다는 보장이 없으므로 데이터가 1건 나오도록 쿼리를 수정해줘야 합니다.

where 주문일자 >= (select to_date(sysdate_a, 'YYYYMMDD') from 캘린더 where rownum=1)

또는

where 주문일자 >= (select min(to_date(sysdate_a, 'YYYYMMDD')) from 캘린더)

 


by 마농 [2017.03.20 17:56:01]
SELECT *
  FROM (SELECT 주문상품
             , 주문자
             , 주문지
             , 바코드
             , 주문일자
             , 수량
             , 판매코드
             , ROW_NUMBER() OVER(PARTITION BY 주문상품 ORDER BY 주문일자) rn
          FROM 과일가게 
         WHERE -- 조건 --
        )
 WHERE rn = 1
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입