У меня есть веб-сайт, который собирает высокие баллы за игру - боковая панель показывает последние 10 баллов (не обязательно самые высокие, только последние 10). Однако, поскольку пользователь может быстро играть в несколько игр, они могут доминировать в последних 10 списках. Как я могу написать SQL-squery, чтобы показать последние 10 баллов, но ограничить его одним пользователем?SQL - один результат на запись пользователя
ответ
SELECT username, max(score)
FROM Sometable
GROUP BY username
ORDER BY Max(score) DESC
и из этого выберите верхний X в зависимости от вашей платформы db. выбрать верхнюю (10) в MS-SQL 2005+
редактировать
извините, я вижу, что вы хотите вещи упорядоченные по дате.
Вот рабочий запрос с MS-SQL 2005.
;
WITH CTE AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY username ORDER BY dateadded DESC) AS 'RowNo',
username, score, dateadded FROM SomeTable
)
SELECT username, score, dateadded FROM CTE
WHERE RowNo = 1
Плакат хочет получить последние 10 баллов, т. Е. Последний балл от каждого из 10 пользователей, а не самый высокий. Не имеет смысла заказать по результату или показать MAX (оценка). –
Отличный ответ, это то, что мне нужно –
Группа пользователем ... и либо выберите Max (Score), Макс ([Подача Дата]) или любой другой.
В SQL Server вы можете использовать RANK() OVER() с соответствующими PARTITION и GROUP BY, но какую платформу вы используете?
В интересах обеспечения другой точки зрения, вы можете просто добавить поле «Макс оценки» к столу пользователя, а затем использовать простой запрос с заказом на, чтобы получить верхнюю 10.
Вашего обновления будешь нужно проверить, если новый счет, если выше, чем текущий максимальный балл.
Он имеет то преимущество, что запрашивает таблицу, которая, скорее всего, будет содержать меньше строк, чем ваша таблица баллов.
В любом случае, еще один вариант рассмотрения.
Вот рабочий пример, который я построил на SQL Server 2008
WITH MyTable AS
(
SELECT 1 as UserId, 10 as Score UNION ALL
SELECT 1 as UserId, 11 as Score UNION ALL
SELECT 1 as UserId, 12 as Score UNION ALL
SELECT 2 as UserId, 13 as Score UNION ALL
SELECT 2 as UserId, 14 as Score UNION ALL
SELECT 3 as UserId, 15 as Score UNION ALL
SELECT 3 as UserId, 16 as Score UNION ALL
SELECT 3 as UserId, 17 as Score UNION ALL
SELECT 4 as UserId, 18 as Score UNION ALL
SELECT 4 as UserId, 19 as Score UNION ALL
SELECT 5 as UserId, 20 as Score UNION ALL
SELECT 6 as UserId, 21 as Score UNION ALL
SELECT 7 as UserId, 22 as Score UNION ALL
SELECT 7 as UserId, 23 as Score UNION ALL
SELECT 7 as UserId, 24 as Score UNION ALL
SELECT 8 as UserId, 25 as Score UNION ALL
SELECT 8 as UserId, 26 as Score UNION ALL
SELECT 9 as UserId, 26 as Score UNION ALL
SELECT 10 as UserId, 20 as Score
),
MyTableNew AS
(
SELECT Row_Number() OVER (Order By UserId) Sequence, *
FROM MyTable
),
RankedUsers AS
(
SELECT *, Row_Number() OVER (Partition By UserId ORDER BY Sequence DESC) Ranks
FROM MyTableNew
)
SELECT *
FROM MyTableNew
WHERE Sequence IN
(
SELECT TOP 5 Sequence
FROM RankedUsers
WHERE Ranks = 1
ORDER BY Sequence DESC
)
SELECT s2.*
FROM
(SELECT user_id, MAX(action_time) AS max_time
FROM scores s1 GROUP_BY user_id
ORDER BY MAX(action_time) DESC LIMIT 10)s1
INNER JOIN scores s2 ON (s2.user_id = s1.user_id AND s2.action_time = s1.max_time)
Это синтаксис Mysql, для сервера SQL вы должны использовать SELECT TOP 10 ...
вместо LIMIT 10
.
- 1. Получите один результат на sql
- 2. Один раз учетная запись пользователя
- 3. SQL-запрос - возвращает один результат на ID
- 4. Получите корневую запись пользователя, используя SQL
- 5. SQL Server Выберите запись, основанную на дате и типе пользователя
- 6. Разделите один результат на другой результат выбора
- 7. PHP SQL Возвращает только один результат
- 8. SQL Устранить один результат после присоединения
- 9. Объединить два SQL-запроса в один результат.
- 10. Оператор SQL CASE, один результат кажется недостижимым
- 11. SQL или сравнения только один результат
- 12. SQL-запрос возвращает один результат меньше ожидаемого
- 13. SQL-запрос возвращает только один результат
- 14. SQL в ADO.NET возвращает только один результат
- 15. Как вывести только один результат SQL?
- 16. Выберите один результат в строке sql?
- 17. SQL (JOIN) - один два результат из колонки на две колонки
- 18. PowerShell: запись только на запись записывает один объект
- 19. Как вручную удалить учетную запись пользователя SQL?
- 20. SQL оператор возвращает только один запись
- 21. Как обработать один результат из SQL-запроса в PHP?
- 22. Ссылка на результат SQL-запроса
- 23. Ограничение объединенной таблицы на один результат Mssql
- 24. Запись в один файл из двух потоков дает неожиданный результат
- 25. Хотя показывает только один результат
- 26. Суета: один эксперимент на пользователя
- 27. MySQL Выполнения больше операторов SQL и получить один результат
- 28. mysqli_fetch_assoc только возвращает один результат
- 29. SQL Group на один столбец
- 30. MySQLi показывает только один результат
Какая база данных? – CJM
, если пользователь играет в 5 игр, добавляется ли оценка всех 5 игр вместе или вы берете только самый высокий балл? –