Mysql查询最新的高分,而不是最高的高分
编辑:由伊恩和马克解决 游戏的高分需要从MySQL数据库中获取(使用php)。 我使用的查询可以很好地处理总是随时间增加的统计数据。 但是,查询不适用于可以随时间上升或下降的统计数据 一些细节: 玩家的统计数据存储在Mysql查询最新的高分,而不是最高的高分,mysql,Mysql,编辑:由伊恩和马克解决 游戏的高分需要从MySQL数据库中获取(使用php)。 我使用的查询可以很好地处理总是随时间增加的统计数据。 但是,查询不适用于可以随时间上升或下降的统计数据 一些细节: 玩家的统计数据存储在stats表中。每个播放器有多行(所有更新),一个自动增量列是主键 CREATE TABLE IF NOT EXISTS `stats` ( `id` int(11) NOT NULL AUTO_INCREMENT, `stamp` bigint(20) NOT NU
stats
表中。每个播放器有多行(所有更新),一个自动增量列是主键
CREATE TABLE IF NOT EXISTS `stats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stamp` bigint(20) NOT NULL,
`username` varchar(255) NOT NULL,
`kill` int(11) NOT NULL,
`death` int(11) NOT NULL,
`kdr` decimal(6,3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=956 ;
一些样本数据:
1, 1365175892, user1, 1089, 191, 5.702
2, 1365175892, user2, 1805, 547, 6.709
3, 1365175892, user3, 104397, 2272, 45.949
4, 1365175892, user1, 1163, 200, 5.815
5, 1365175892, user2, 1090, 204, 5.343
死亡人数随着时间的推移而增加,因此很容易创建前10名
问题
对于致死率(KDR),该值可以随时间上升或下降。
示例:更新5中的用户2的KDR比更新2中的低,但我的高分列表仍然显示更新2中的最高KDR,而我实际上需要更新5中的较低KDR
因此,在这里,对于前10名,我不需要最高值(即自动为每个玩家存储的最后一个值),而是最新的值(这不是唯一的最高值)。
我无法让它工作
我尝试过的一个查询只适用于增加统计数据:
SELECT s.*
FROM stats AS s
INNER JOIN
(
SELECT username, MAX(kdr) AS kdr
FROM stats
GROUP BY username
) AS groupedstats
ON s.username = groupedstats.username
AND s.kdr = groupedstats.kdr
ORDER BY kdr DESC
LIMIT 10
有谁能帮我找到正确的kdr高分表吗?我迷路了
谢谢假设您希望kdr为每个用户的最新记录排名前十,请尝试:
SELECT s.*
FROM stats AS s
INNER JOIN
(
SELECT username, MAX(`stamp`) AS `stamp`
FROM stats
GROUP BY username
) AS groupedstats
ON s.username = groupedstats.username
AND s.`stamp` = groupedstats.`stamp`
ORDER BY kdr DESC
LIMIT 10
假设您希望kdr为每个用户的最新记录排名前10位,请尝试:
SELECT s.*
FROM stats AS s
INNER JOIN
(
SELECT username, MAX(`stamp`) AS `stamp`
FROM stats
GROUP BY username
) AS groupedstats
ON s.username = groupedstats.username
AND s.`stamp` = groupedstats.`stamp`
ORDER BY kdr DESC
LIMIT 10
像这样的
select * from stats where id in (
select max(id) as maxid
from stats
group by username
)
order by kdr desc limit 10
像这样的
select * from stats where id in (
select max(id) as maxid
from stats
group by username
)
order by kdr desc limit 10
最新的一个是id最高的,对吧?在这种情况下,它让人相信你自己无法解决这个问题!最新的一个是id最高的,对吧?在这种情况下,它让人相信你自己无法解决这个问题!谢谢,这正是我需要的!你让它看起来很简单。一旦你明白了,事情就简单了。此外,此查询产生的结果与下面Mark Bannister的答案完全相同。。。太糟糕了,我不能提高投票率,因为我没有足够的尊重点马克已经回答了问题(计算出最新的邮票)。我走了一条捷径(可能是因为我有点懒),并假设最新的邮票也会有最高的IDFW,马克·班尼斯特的答案可能会表现得更好——特别是在更大的数据集上。我会认为他的回答是正确的。此外,它与您自己的查询非常相似(除了我确信它的本意是MAX(id)),所以您自己也无法理解它;-)谢谢,这正是我需要的!你让它看起来很简单。一旦你明白了,事情就简单了。此外,此查询产生的结果与下面Mark Bannister的答案完全相同。。。太糟糕了,我不能提高投票率,因为我没有足够的尊重点马克已经回答了问题(计算出最新的邮票)。我走了一条捷径(可能是因为我有点懒),并假设最新的邮票也会有最高的IDFW,马克·班尼斯特的答案可能会表现得更好——特别是在更大的数据集上。我会认为他的回答是正确的。此外,它与您自己的查询非常相似(除了我确信它的本意是MAX(id)),所以您自己也无法理解它;-)谢谢,这正是我需要的!你让它看起来很简单。一旦你明白了,事情就简单了。此外,此查询产生的结果与上面Ian Kenney的答案完全相同。。。太遗憾了,我不能投票,因为我没有足够的尊重点谢谢你,这正是我需要的!你让它看起来很简单。一旦你明白了,事情就简单了。此外,此查询产生的结果与上面Ian Kenney的答案完全相同。。。太遗憾了,我不能投票,因为我没有足够的尊重分数