복붙노트

[SQL] 함께 ORDER BY와 GROUP BY를 사용하여

SQL

함께 ORDER BY와 GROUP BY를 사용하여

이 같은 내 테이블 외모 (내가 MySQL을 사용하고 있습니다)

m_id | v_id | timestamp
------------------------
6    |   1  | 1333635317
34   |   1  | 1333635323
34   |   1  | 1333635336
6    |   1  | 1333635343
6    |   1  | 1333635349

내 목표는 각이 한 번 m_id, 가장 높은 타임 스탬프에 의해 순서 걸릴 것입니다.

결과는해야한다 :

m_id | v_id | timestamp
------------------------
6    |   1  | 1333635343
34   |   1  | 1333635336

그리고 난이 쿼리를 썼다 :

SELECT * FROM table GROUP BY m_id ORDER BY timestamp DESC

그러나, 결과는 다음과 같습니다

m_id | v_id | timestamp
------------------------
34   |   1  | 1333635323
6    |   1  | 1333635317

나는 처음 GROUP_BY가 수행 한 후 결과를 정렬 있기 때문에 발생합니다 생각합니다.

어떤 아이디어? 감사합니다.

해결법

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

    1.제대로 그룹화를 사용하여이 작업을 수행하는 한 가지 방법 :

    제대로 그룹화를 사용하여이 작업을 수행하는 한 가지 방법 :

    select l.* 
    from table l
    inner join (
      select 
        m_id, max(timestamp) as latest 
      from table 
      group by m_id
    ) r
      on l.timestamp = r.latest and l.m_id = r.m_id
    order by timestamp desc
    

    어떻게 이런 작품 :

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

    2.당신이 정말로 걱정하지 않는 경우 어느 대해 당신이 얻을 것이다 당신의 v_id 항상 다음을 수행 할 수있는이 m_i를 주어진에 대해 동일 타임 스탬프 :

    당신이 정말로 걱정하지 않는 경우 어느 대해 당신이 얻을 것이다 당신의 v_id 항상 다음을 수행 할 수있는이 m_i를 주어진에 대해 동일 타임 스탬프 :

    select m_id, v_id, max(timestamp) from table
    group by m_id, v_id
    order by timestamp desc
    

    이제 주어진 m_id에 대한 v_id 변경 한 후 다음을 수행해야하는 경우

    select t1.* from table t1
    left join table t2 on t1.m_id = t2.m_id and t1.timestamp < t2.timestamp
    where t2.timestamp is null
    order by t1.timestamp desc
    
  3. ==============================

    3.이 시도 할 수 있습니다

    이 시도 할 수 있습니다

     SELECT tbl.* FROM (SELECT * FROM table ORDER BY timestamp DESC) as tbl
     GROUP BY tbl.m_id  
    
  4. ==============================

    4.여기에 간단한 해결책이다

    여기에 간단한 해결책이다

    select m_id,v_id,max(timestamp) from table group by m_id;
    

    m_id로 그룹 있지만 각 m_id에 대한 타임 스탬프의 최대 수.

  5. ==============================

    5.SQL>

    SQL>

    SELECT interview.qtrcode QTR, interview.companyname "Company Name", interview.division Division 
    FROM interview 
    JOIN jobsdev.employer 
        ON (interview.companyname = employer.companyname AND employer.zipcode like '100%')
    GROUP BY interview.qtrcode, interview.companyname, interview.division
    ORDER BY interview.qtrcode;
    
  6. ==============================

    6.그냥 당신은 ASC와 DESC해야합니다. 다음과 같은 쿼리를 작성합니다. 이 오름차순으로 값을 반환합니다.

    그냥 당신은 ASC와 DESC해야합니다. 다음과 같은 쿼리를 작성합니다. 이 오름차순으로 값을 반환합니다.

    SELECT * FROM table GROUP BY m_id ORDER BY m_id asc;
    
  7. ==============================

    7.왜 이렇게 복잡하게 만든다? 이 일했다.

    왜 이렇게 복잡하게 만든다? 이 일했다.

    SELECT m_id,v_id,MAX(TIMESTAMP) AS TIME
     FROM table_name 
     GROUP BY m_id
    
  8. from https://stackoverflow.com/questions/10030787/using-order-by-and-group-by-together by cc-by-sa and MIT license