如何使用MYSQL排序和分组?

时间:2018-02-09 02:21:21

标签: php mysql sql greatest-n-per-group

我有一张下表

-----------------------------------
Date        |      Prefilling  |  Ref
-----------------------------------
10/10/2017  |       5          |  dinesh
17/10/2017  |       8          |  Ajay  
07/05/2017  |       5          |  Aarthi
01/01/2018  |       8          |  Kumar 
-----------------------------------

如何同时执行订单和分组? 我正在使用以下查询,但它没有给出实际结果

  SELECT * FROM (  
        select * from table order by str_to_date(date,'%d/%m/%Y') DESC  
    ) AS tmp_table group by  Prefilling

我期待结果,以及Ref

Array 
(
  [5] =>  10/10/2017, dinesh
  [8]  => 01/01/2018,  kumar
}

1 个答案:

答案 0 :(得分:1)

根据您显示的结果,您希望获得每个Prefilling的最新日期。您可以使用MAX()并使用最大值对其进行排序。

SELECT  Prefilling, MAX(STR_TO_DATE(`date`,'%d/%m/%Y')) AS MAX_DATE
FROM    TableName
GROUP   BY Prefilling
ORDER   BY MAX_DATE 

这里是Demo

以下是根据您更新的问题更新的答案。您可以单独检索子查询中每个Prefilling的最新日期,并将结果与​​原始表本身连接,前提是它在两个条件下都匹配 - 预填充和最新日期以获取所有列。

SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  Prefilling, MAX(str_to_date(date,'%d/%m/%Y')) AS MAX_DATE
            FROM     TableName
            GROUP   BY Prefilling
        ) b ON a.Prefilling = b.Prefilling
                AND str_to_date(a.date,'%d/%m/%Y') = b.MAX_DATE
ORDER   BY b.MAX_DATE

Demo