Getting a MySQL group by query to display the row in that group with the highest value
I'm trying to figure out how to query my database so that it will essentially first ORDER my results and then GROUP them... This question seems to be slightly common and I have found examples but I still don't quite grasp the 'how' to do this and use the examples in my own situation.... So all help is definitely appreciated.
Here are my MySQL tables:
books
book_id book_titleusers
user_id user_namebook_reviews
review_id book_id user_id review_date (unix timestamp date)I would like to query 30 of the latest book reviews. They will simply display as:
Book Name Username of ReviewerHowever I would like to display each book no more than one time. So the review shown in the list should be the most recently added review. To do this I have been simply grouping by book_name and ordering by review_date DESC. But querying this way doesn't display the record with the most recently added review_date as the grouped by row so my data is incorrect.
Here is my current query:
SELECT books.books_title, users.user_name, book_reviews.review_id FROM books, users, book_reviews WHERE book_r开发者_如何学JAVAeviews.book_id = books.book_id AND book_reviews.user_id = users.user_id GROUP BY book_title ORDER BY review_date DESC LIMIT 30
From what I've read it seems like I have to have a subquery where I get the MAX(review_date) value but I still don't understand how to link it all up.
Thanks a ton.
Use:
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 doesn't have analytical/ranking/windowing functionality, but this ranks the reviews where the latest is marked as 1. This is on a per book basis...
I exposed the review date to order by the latest of those which are the latest per book...
精彩评论