조건에 따른 2차조건 질문드립니다. 0 2 2,238

by 전제혁 [SQL Query] 조건 조인 [2010.07.28 20:07:23]


테이블명 : user_info
no  name  id    reg_dt(등록일) cafe_dt(카페가입일)
--------------------------------------------------------------------------------------
1 홍길동  hong    20100708      20100710  
2 이순신  lee1  20100715     20100711
3  강호동  kang   20100714      20100712
4  이승기  lee2    20100713      20100714
5  이수근  lee2    20100715      20100715

위와 같은 테이블에서 카페가입일을 기준으로 오늘날짜보다 큰 3개를 가져오려고 합니다.
대신 조건에 해당되는게 3개라면 3개를 가져오고 만약 오늘날짜보다 카페가입일이 큰게 2개라면
나머지 한게는 등록일 최근으로 가져오려고 합니다.


예를들어 오늘날짜가 20100714 이라면 목록순서가 이렇게 됩니다.
5  이수근  lee2    20100715   20100715
4  이승기  lee2    20100713   20100714
2 이순신  lee1    20100715   20100711

오늘날짜가 20100715 이라면
5  이수근  lee2    20100715   20100715
2 이순신  lee1    20100715   20100711
3  강호동  kang   20100714   20100712

즉, 쉽게말해 카페가입일자가 오늘날짜보다 큰 3개를 가져오는것을 조건으로 하되 3개가 안되면 등록일순으로 뽑으려고 하는것입니다.

나름 시도를 해봤는데 힘드네요... ㅠ.ㅠ
by 초짜 [2010.07.29 09:26:59]
with t as(
select 1 no, '홍길동' name, 'hong' id, '20100708' reg_dt, '20100710' cafe_dt from dual
union all
select 2 no, '이순신' name, 'lee1' id, '20100715' reg_dt, '20100711' cafe_dt from dual
union all
select 3 no, '강호동' name, 'kang' id, '20100714' reg_dt, '20100715' cafe_dt from dual
union all
select 4 no, '이승기' name, 'lee2' id, '20100713' reg_dt, '20100715' cafe_dt from dual
union all
select 5 no, '이수근' name, 'lee2' id, '20100715' reg_dt, '20100715' cafe_dt from dual
)
select *
from (
select * from
(
select
*
from t
where cafe_dt > '20100714'
union
select
*
from t
where reg_dt > '20100714'
)
order by cafe_dt desc, reg_dt desc
)
where rownum <= 3

by madcat [2010.07.29 09:38:43]
with t as(
select 1 no, '홍길동' name, 'hong' id, '20100708' reg_dt, '20100710' cafe_dt from dual
union all
select 2 no, '이순신' name, 'lee1' id, '20100715' reg_dt, '20100711' cafe_dt from dual
union all
select 3 no, '강호동' name, 'kang' id, '20100714' reg_dt, '20100712' cafe_dt from dual
union all
select 4 no, '이승기' name, 'lee2' id, '20100713' reg_dt, '20100714' cafe_dt from dual
union all
select 5 no, '이수근' name, 'lee2' id, '20100715' reg_dt, '20100715' cafe_dt from dual
)
select *
from (
select *
from t
order by (case when cafe_dt >= '20100714' then 1 else 2 end),
(case when cafe_dt >= '20100714' then cafe_dt else reg_dt end) desc
)
where rownum <= 3
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입