하나의 테이블에 있는 두개의 컬럼값이 같은 것끼리 묶어서 그중 최신 행 1개 들만 뽑아낼수 있나요?

  1. List item

컬럼 보낸 사람 | 메세지코드 | 내용 | 받는사람 | 보낸시간

 A           ME-1       "AA"      B          12:30
 A           ME-1       "AA"      B          12:32      
 B           ME-1       "AA"      A          12:31
 B           ME-1       "AA"      A          12:33
 A           ME-1       "AA"      C          12:30
 A           ME-1       "AA"      C          12:32
 C           ME-1       "AA"      A          12:31
 C           ME-1       "AA"      A          12:33

이런 테이블이 있는데

B와 C 를 직접입력하지 않고 A 만 가지고 A와 B의 대화 내용중 제일 최신 행, A와 C의 대화 내용중 제일 최신 행을 꺼내오고 싶은데 가능 한가요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    본 답변은 다음 가정 하에 작성되었습니다.

    1. 보낸 사람 | 메세지코드 | 내용 | 받는사람 | 보낸시간 의 컬럼 명이 sender, message_code, content, receiver, timestamp 와 같음
    2. 테이블의 이름은 table 임.

    물음에 대한 답변은 다음과 같고요.

    select speaker, max(timestamp)
    from 
        (select (if(sender ='A') then receiver else sender) as speaker, timestamp
        from table where sender = 'A' or receiver = 'A') opponent
    group by speaker
    

    설명하자면,

    select (if(sender ='A') then receiver else sender) as speaker, timestamp
    from table where sender = 'A' or receiver = 'A'
    

    로 A와 통화한 기록을 묶은 테이블 opponent를 임시로 만들어,

    opponent 테이블을 speaker 로 group_by 해 timestamp의 max 값을 찾아주면 되겠네요.


    표로 설명하자면

    1. 원본 테이블(table)이 다음과 같고,

    sender message_code content receiver timestamp
    A ME-1 AA B 12:30
    A ME-1 AA B 12:32
    B ME-1 AA A 12:31
    B ME-1 AA A 12:33
    A ME-1 AA C 12:30
    A ME-1 AA C 12:32
    C ME-1 AA A 12:31
    C ME-1 AA A 12:33

    2. 다음 쿼리로 만들어진 opponent 테이블은 다음과 같습니다.

    select (if(sender ='A') then receiver else sender) as speaker, timestamp
    from table where sender = 'A' or receiver = 'A') opponent
    
    speaker timestamp
    B 12:30
    B 12:32
    B 12:31
    B 12:33
    C 12:30
    C 12:32
    C 12:31
    C 12:33

    3. 2에서 만든 opponent 테이블에 group by speacker 로 max(timestamp)를 찾으면 다음과 같은 결과가 나옵니다.

    speaker timestamp
    B 12:33
    C 12:33
    • (•́ ✖ •̀)
      알 수 없는 사용자

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.