У меня есть таблица user_score с такой структурой:
|id|user_id|group_id|score| timestamp |
| 1| 1| 1| 500| 2013-02-24 18:00:00|
| 2| 2| 1| 200| 2013-02-24 18:01:50|
| 3| 1| 2| 100| 2013-02-24 18:06:00|
| 4| 1| 1| 6000| 2013-02-24 18:07:30|
Что мне нужно сделать, так это выбрать всех пользователей из этой таблицы, которые относятся к определенной группе. Выберите их фактическую (согласно метке времени) оценку в этой группе и их рейтинг.
Что у меня есть (редактировать: после комментария Джокачина я обнаружил, что мой собственный запрос работает не так, как я ожидал, извините за все):
SELECT user_id, score, @curRank := @curRank + 1 AS rank
FROM (
SELECT *
FROM (
SELECT * FROM `user_score`
WHERE `group_id` = 1
ORDER BY `timestamp` DESC
) AS sub2
GROUP BY `user_id`
) AS sub, (SELECT @curRank := 0) r
ORDER BY `rank`
Ожидаемый результат для примера data и group_id = 1:
|user_id|score|rank|
| 1| 6000| 1|
| 2| 200| 2|
Но подзапросы MySQL немного проблематичны, вы видите какое-нибудь другое решение, пожалуйста?
Мне, вероятно, нужно будет получить ранг одиночного пользователя в группе позже. Я потерян в данный момент.
SELECT
вызывают проблемы. С подзапросом в предложенииFROM
дело обстоит гораздо реже. Однако я не вижу смысла снова оборачивать самый внутренний запрос, чтобы выполнитьGROUP BY
. - person Michael Berkowski   schedule 24.02.2013