Get the latest date from grouped MySQL data

前端 未结 7 837
一生所求
一生所求 2020-11-27 04:29

I have the following data in my database:

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


        
相关标签:
7条回答
  • 2020-11-27 05:03

    This should work:

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

    It just sort the dates from last to first and by grouping it only grabs the first one.

    0 讨论(0)
  • 2020-11-27 05:04

    Are you looking for the max date for each model?

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

    If you're looking for all models matching the max date of the entire table...

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

    [--- Added ---]

    For those who want to display details from every record matching the latest date within each model group (not summary data, as asked for in the OP):

    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 and newer supports the OVER clause, producing the same results a bit faster for larger data sets.

    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;
    
    0 讨论(0)
  • 2020-11-27 05:07

    try this:

    SELECT model, date
    FROM doc
    WHERE date = (SELECT MAX(date)
    FROM doc GROUP BY model LIMIT 0, 1)
    GROUP BY model
    
    0 讨论(0)
  • 2020-11-27 05:10

    And why not to use this ?

    SELECT model, date FROM doc ORDER BY date DESC LIMIT 1
    
    0 讨论(0)
  • 2020-11-27 05:13

    Subquery giving dates. We are not linking with the model. So below query solves the problem.

    If there are duplicate dates/model can be avoided by the following query.

    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
    
    0 讨论(0)
  • 2020-11-27 05:15

    You can try using max() in subquery, something like this :

    SELECT model, date  
    FROM doc 
    WHERE date in (SELECT MAX(date) from doc GROUP BY model);
    
    0 讨论(0)
提交回复
热议问题