Select only last value using group by at mysql
Use a simple group by id_member, but select:
substring(max(concat(from_unixtime(timestamp),attendance)) from 20) as attendance
This attaches attendance to the timestamp for each row in a group, in order to be able to select the desired timestamp/attendance with max() and then extract just the attendance.
What concat()
returns is 19 characters of formatted timestamp (YYYY-mm-dd HH:MM:SS) with the attendance appended starting at character 20; the substring(... from 20)
gets just the attendance from the (stringwise) maximum one for the group. You can remove the group by and just
select concat(from_unixtime(timestamp),attendance), timestamp, attendance
to get a better idea of how it uses max to get the right attendance.
SELECT id_branch_channel, id_member, attendance, timestamp, id_member
FROM (select * from view_event_attendance order by timestamp desc) as whatever
WHERE id_event = 782
GROUP BY id_event,id_member;
EDIT: This may yield better performance:
SELECT *
FROM (SELECT id_branch_channel, id_member, attendance, timestamp, id_member
FROM view_event_attendance
WHERE id_event = 782
ORDER BY timestamp desc
) as whatever
GROUP BY id_event,id_member;
As long as the result-set can fit into the Innodb_buffer_pool, you will not see a significant performance drop.