복붙노트

[SQL] MAX와 GROUP BY를 사용하여 모든 해당 필드를 선택

SQL

MAX와 GROUP BY를 사용하여 모든 해당 필드를 선택

나는이 테이블이 :

그리고 가장 높은 타임 스탬프 행을 DEAL_ID 각각에 대해 반환 요청하고, 해당 status_id을하고 싶습니다.

그래서 예를 들어, 나는 2 개 행을 반환 것입니다 :

1226, 3, 2009-08-18 12:10:25
1227, 2, 2009-08-17 14:31:25

나는이 쿼리와 함께 할 것을 시도

SELECT deal_id, status_id, max(timestamp) FROM deal_status GROUP BY deal_id

그러나 그것은 잘못된 status_id을 반환합니다 :

1226, 1, 2009-08-18 12:10:25
1227, 1, 2009-08-17 14:31:25

해결법

  1. ==============================

    1.하나의 기본 키 필드없이, 당신의 최선의 방법이라고 생각 :

    하나의 기본 키 필드없이, 당신의 최선의 방법이라고 생각 :

    select * from deal_status
    inner join
      (select deal_id as did, max(timestamp) as ts
      from deal_status group by deal_id) as ds
      on deal_status.deal_id = ds.did and deal_status.timestamp = ds.ts
    

    같은 시간에 같은 제품에 대한 두 개의 서로 다른 상태를 가지고 허용하는 경우이 여전히 작동하지 않습니다

  2. ==============================

    2.안녕 나는이 유를 원하는 부여합니다 희망

    안녕 나는이 유를 원하는 부여합니다 희망

    select deal_id,status_id, timestamp from deal_status 
    inner join
      (select deal_id as did,max(timestamp) as ts
      from deal_status group by deal_id  )as ds
      on deal_status.deal_id = ds.did and deal_status.timestamp = ds.ts order by deal_id
    
  3. from https://stackoverflow.com/questions/1305056/selecting-all-corresponding-fields-using-max-and-group-by by cc-by-sa and MIT license