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
Last activity: Sep 14, 2017, 06:55 AM