Sample Header Ad - 728x90

Fetch the newest row grouped by a column in MySQL

7 votes
2 answers
5037 views
My problem seems like it should have a much simpler solution than what I have come up with. Starting with this data set: **log_table** +--------+-----------+------------------+---------+ | log_id | entity_id | date | comment | +--------+-----------+------------------+---------+ | 1 | A | 2012-10-23 07:50 | foo | | 2 | B | 2012-10-23 07:59 | bar | | 3 | B | 2012-10-23 08:11 | baz | | 4 | A | 2012-10-23 08:23 | bat | +--------+-----------+------------------+---------+ Say I wanted to get the *latest* date of log entries for each entity so that the result looked like: Results: +-----------+------------------+--------------+ | entity_id | last_log_date | last_comment | +-----------+------------------+--------------+ | B | 2012-10-23 08:11 | baz | | A | 2012-10-23 08:23 | bat | +-----------+------------------+--------------+ I'm currently using MySQL that looks something like: SELECT entity_id, date AS last_log_date, comment AS last_comment FROM ( SELECT * FROM log_table ORDER BY date DESC, log_id ASC ) AS ordered_log GROUP BY entity_id This works fine but it doesn't seem very efficient to me, there *has* to be a better way of doing this, surely?
Asked by Asgrim (73 rep)
Oct 23, 2012, 02:31 PM
Last activity: Sep 14, 2017, 06:55 AM