쿼리 조언 부탁드립니다 0 5 744

by naverTT [SQL Query] [2017.02.01 08:09:06]


테이블 값이 

SEQ(PK) MSG_CONT SENDER RECEIVER 

1, '안녕하세요', '홍길동' , '구마적'

2, '네안녕하세요' , '구마적' , '홍길동'

3, '반갑습니다' , '어머님' , '홍길동'

4, '뭐하십니까' , '홍길동' , '시라소니'

 

이렇게 되어있는 데 제가 홍길동이에요

저렇게 메일이 쌓인 경우에 종합하여 한 건씩만 보이게 하고 싶어요

내가 보낸거던 받은거던 모아서 하나씩만요ㅠㅠ

예를 들면

-------

구마적

어머님

시라소니

--------

이렇게만 나오게요 ㅠㅠ pk는 SEQ 하나뿐입니다

조언부탁드려요

by jkson [2017.02.01 08:19:09]
WITH T (SEQ, MSG_CONT, SENDER, RECEIVER) AS
(
SELECT 1, '안녕하세요', '홍길동' , '구마적' FROM DUAL UNION ALL
SELECT 2, '네안녕하세요' , '구마적' , '홍길동' FROM DUAL UNION ALL
SELECT 3, '반갑습니다' , '어머님' , '홍길동' FROM DUAL UNION ALL
SELECT 4, '뭐하십니까' , '홍길동' , '시라소니' FROM DUAL
)
SELECT DISTINCT DECODE(SENDER,:NM,RECEIVER,SENDER) OPPNT 
FROM T
WHERE (SENDER = :NM OR RECEIVER = :NM)

 


by naverTT [2017.02.01 09:23:06]

데이터가 엄청나게 늘어날꺼라 WITH 절은 힘들것같습니다 ㅠㅠ

실제로 테이블도 하나인거라 UNION ALL 을 사용하기도 애매하고요 ㅜㅜ 어떻게안될까요 ㅠㅠ


by 마농 [2017.02.01 09:28:20]

답변에서 중요한 것은 With 가 아니라, 아래쪽 Select 입니다.


by naverTT [2017.02.01 18:27:01]

보니까 시간정보도 같이 보여줘야 헀어요.. 1번과 2번이 연결된 메일이라고하면 2번의 시간으로 가져오는 방법이 있을까요?

1, '안녕하세요', '홍길동' , '구마적', '2016-12-12'

2, '네안녕하세요' , '구마적' , '홍길동','2016-12-14'

3, '반갑습니다' , '어머님' , '홍길동','2016-12-13'

4, '뭐하십니까' , '홍길동' , '시라소니',''

이럴경우에 2, 구마적, '2016-12-14' 으로 나오는데

만약에 저 날짜가 비어있으면 그 전꺼로 나와요 ㅠㅠ


by 마농 [2017.02.01 18:50:26]
SELECT MAX(seq) seq
     , DECODE(sender, :nm, receiver, sender) oppnt
     , MAX(dt) dt
  FROM t
 WHERE :nm IN (sender, receiver)
 GROUP BY DECODE(sender, :nm, receiver, sender)
;

 

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