복붙노트

[SQL] 그룹화 MySQL의 데이터에서 최신 날짜를 가져옵니다

SQL

그룹화 MySQL의 데이터에서 최신 날짜를 가져옵니다

내 데이터베이스에 다음과 같은 데이터를 가지고 :

|NO | model | date     | 
+---+-------+----------+
|1  | bee   |2011-12-01|
|2  | bee   |2011-12-05|
|3  | bee   |2011-12-12|
|4  | tar   |2011-12-13|

나는 각 모델 그룹의 최신 날짜를 얻으려면 :

| model | date     | 
+-------+----------+
| bee   |2011-12-12|
| tar   |2011-12-13|

나는 시도했다 :

SELECT model, date 
FROM doc
WHERE date ........????? //what is the next?
GROUP BY model

해결법

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

    1.각 모델의 최대 날짜를 찾고 계십니까?

    각 모델의 최대 날짜를 찾고 계십니까?

    SELECT model, max(date) FROM doc
    GROUP BY model
    

    경우에 당신은 전체 테이블의 최대 날짜를 일치하는 모든 모델을 찾고 ...

    SELECT model, date FROM doc
    WHERE date IN (SELECT max(date) FROM doc)
    

    [--- 추가 ---]

    (영업의 요구대로하지 요약 자료) 각 모델 그룹 내 최신 날짜와 일치하는 모든 레코드의 세부 사항을 표시 할 사람들을 위해 :

    SELECT d.model, d.date, d.color, d.etc FROM doc d
    WHERE d.date IN (SELECT max(d2.date) FROM doc d2 WHERE d2.model=d.model)
    

    MySQL은 8.0 새로운 지원하는 비트 속도보다 큰 데이터 세트에 대해 동일한 결과를 생성하는 OVER 절.

    SELECT model, date, color, etc FROM (SELECT model, date, color, etc, 
      max(date) OVER (PARTITION BY model) max_date FROM doc) predoc 
    WHERE date=max_date;
    
  2. ==============================

    2.당신은 최대 () 하위 쿼리에, 이런 식으로 뭔가를 사용하여 시도 할 수 있습니다 :

    당신은 최대 () 하위 쿼리에, 이런 식으로 뭔가를 사용하여 시도 할 수 있습니다 :

    SELECT model, date  
    FROM doc 
    WHERE date in (SELECT MAX(date) from doc GROUP BY model);
    
  3. ==============================

    3.하위 쿼리는 날짜를 제공합니다. 우리는 모델과 연결되지 않습니다. 그래서 아래 쿼리는 문제를 해결한다.

    하위 쿼리는 날짜를 제공합니다. 우리는 모델과 연결되지 않습니다. 그래서 아래 쿼리는 문제를 해결한다.

    중복 된 날짜가있는 경우 / 모델은 다음과 같은 쿼리를 방지 할 수 있습니다.

    select t.model, t.date
    from doc t
    inner join (select model, max(date) as MaxDate from doc  group by model)
    tm on t.model = tm.model and t.date = tm.MaxDate
    
  4. ==============================

    4.이 시도:

    이 시도:

    SELECT model, date
    FROM doc
    WHERE date = (SELECT MAX(date)
    FROM doc GROUP BY model LIMIT 0, 1)
    GROUP BY model
    
  5. ==============================

    5.다른 열이 최대 (날짜)와 같은 행에서하게 나타날 것이라고는 보장이 없기 때문에 내 문제가 해결되지 않는 최대 (날짜)를 사용하고 있습니다. 대신이 하나가 올바른 순서로 내 문제와 정렬 된 그룹을 해결하고 최대 날짜가 같은 다른 열의 값이 동일한 행에서 것을의 :

    다른 열이 최대 (날짜)와 같은 행에서하게 나타날 것이라고는 보장이 없기 때문에 내 문제가 해결되지 않는 최대 (날짜)를 사용하고 있습니다. 대신이 하나가 올바른 순서로 내 문제와 정렬 된 그룹을 해결하고 최대 날짜가 같은 다른 열의 값이 동일한 행에서 것을의 :

    SELECT model, date 
    FROM (SELECT * FROM doc ORDER BY date DESC) as sortedTable
    GROUP BY model
    
  6. ==============================

    6.이 작업을해야합니다 :

    이 작업을해야합니다 :

    SELECT model, date FROM doc GROUP BY model ORDER BY date DESC
    

    그것은 단지 종류의 마지막에서 첫번째로하고 그룹화하여 날짜는 첫 번째 하나를 잡고.

  7. ==============================

    7.그리고 왜이 사용 하는가?

    그리고 왜이 사용 하는가?

    SELECT model, date FROM doc ORDER BY date DESC LIMIT 1
    
  8. from https://stackoverflow.com/questions/8470311/get-the-latest-date-from-grouped-mysql-data by cc-by-sa and MIT license