想要返回结果按组分组的最新记录

时间:2016-10-12 14:05:31

标签: mysql aggregate-functions

我按SERIAL_NUMBER分组结果,我想根据记录ID DESC显示每组的最后记录,这是我迄今为止所得到的:

SELECT * FROM 

 (SELECT `SERIAL_NUMBER`, `PART_NUMBER` , `POSITION` , `DUE_CAP_CHECK_DATE` , `DUE_OVERHAUL_DATE`  
  FROM `history_card` ORDER BY `HISTORY_ID` DESC ) AS X  

GROUP BY  `SERIAL_NUMBER`

但它没有返回最后一条记录,它返回第一条记录;(

1 个答案:

答案 0 :(得分:1)

你正在滥用令人难以置信的非标准MySQL扩展名GROUP BY。读这个。 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html(这个扩展就像一匹会说话的马。我们不会怀疑它是否有效。我们想知道它是否有效。)

您可以从表中获取HISTORY_ID的每个值SERIAL_NUMBER的最新(最大)值,如下所示:

  SELECT MAX(HISTORY_ID) FROM history_card  GROUP BY SERIAL_NUMBER

然后,您可以使用该组HISTORY_ID值从表中检索您想要的内容。

  SELECT SERIAL_NUMBER, PART_NUMBER, POSITION, DUE_CAP_CHECK_DATE, DUE_OVERHAUL_DATE
    FROM history_card
   WHERE HISTORY_ID 
         IN (SELECT MAX(HISTORY_ID) FROM history_card  GROUP BY SERIAL_NUMBER)