Comme toujours pour ce genre de question, merci de donner un dump du schéma et des données
Pour mySQL :
Et sur Postgresql :
Pour mySQL :
SELECT test.* FROM test
INNER JOIN (
SELECT village_id, MAX(time) AS maxTime
FROM test
WHERE village_id in (82,116)
GROUP BY village_id
) gtest ON (test.village_id = gtest.village_id AND test.time_a = gtest.maxTime)
Et sur Postgresql :
SELECT id, time, village_id
FROM (
SELECT *, rank() OVER (PARTITION BY village_id ORDER BY time DESC)
FROM test WHERE village_id IN (82, 116)
) Bouh WHERE rank = 1