Utiliser :
SELECT x.book_title,
x.user_name
FROM (SELECT b.book_title,
u.user_name,
br.review_date,
CASE
WHEN @book = b.book_title THEN @rownum := @rownum + 1
ELSE @rownum := 1
END AS rank,
@book := b.book_title
FROM BOOKS b
JOIN BOOK_REVIEWS br ON br.book_id = b.book_id
JOIN USERS u ON u.user_id = br.user_id
JOIN (SELECT @rownum := 0, @book := '') r
ORDER BY b.book_title, br.review_date DESC) x
WHERE x.rank = 1
ORDER BY x.review_date DESC
LIMIT 30
MySQL n'a pas de fonctionnalité d'analyse/de classement/de fenêtrage, mais cela classe les avis où le plus récent est marqué comme 1. C'est sur une base par livre...
J'ai exposé la date de révision pour commander au plus tard de ceux qui sont les plus récents par livre...