Załóżmy Mam tabeli MySQL:Jak mogę wybrać najnowsze wejście dla każdego członka?
╔══════╦═════╦═════════╦═════════╗ ║ time ║ mid ║ field_1 ║ field_2 ║ ╠══════╬═════╬═════════╬═════════╣ ║ 100 ║ 1 ║ 32 ║ 54 ║ ║ 100 ║ 2 ║ 0 ║ 34 ║ ║ 100 ║ 3 ║ 44 ║ 99 ║ ║ 200 ║ 1 ║ 0 ║ 45 ║ ║ 200 ║ 2 ║ 0 ║ 45 ║ ║ 200 ║ 3 ║ 4 ║ 59 ║ ║ 200 ║ 4 ║ 45 ║ 45 ║ ╚══════╩═════╩═════════╩═════════╝
czas jest znacznik czasu UNIX. mid to identyfikator członka. pole_1 jest dostarczane przez członka. pole_2 jest wypełniane automatycznie.
Chciałbym wybrać wiersz z najnowszym niezerowym polem_1 dla wszystkich członków. Więc zapytanie spowodowałoby:
╔══════╦═════╦═════════╦═════════╗ ║ time ║ mid ║ field_1 ║ field_2 ║ ╠══════╬═════╬═════════╬═════════╣ ║ 100 ║ 1 ║ 32 ║ 54 ║ ║ 200 ║ 3 ║ 4 ║ 59 ║ ║ 200 ║ 4 ║ 45 ║ 45 ║ ╚══════╩═════╩═════════╩═════════╝
Jedynym rozwiązaniem wymyśliłem nie wydaje się bardzo elegancki:
SELECT * FROM ( SELECT * FROM t1 WHERE field_1 > 0 ORDER BY time DESC ) AS a GROUP BY mid
Czy istnieje lepszy sposób?
spróbować dowiedzieć się o [MySQL JOIN] (http://dev.mysql.com/doc/refman/5.0/en/join.html) –
http://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group/ – newtover