如何查询mysql表以获取列的当前值和当天的最大值
我有一张像这样的桌子。每个游戏id每5分钟更新一次 game_id players date 12 420 2013-06-19 12:30:00 13 345 2013-06-19 12:30:00 14 600 2013-06-19 12:30:00 12 375 2013-06-19 12:25:00 13 475 2013-06-19 12:25:00 14 575 2013-06-19 12:25:00 12 500 2013-06-19 12:20:00 ... 游戏玩家日期 12 420 2013-06-19 12:30:00 13 345 2013-06-19 12:30:00 14 600 2013-06-19 12:30:00 12 375 2013-06-19 12:25:00 13 475 2013-06-19 12:25:00 14 575 2013-06-19 12:25:00 12 500 2013-06-19 12:20:00 ... 我需要为每个游戏id查询,获得当前玩家(最新时间戳)和一天的最大值。所以结果是这样的 game_id max current 12 500 420 13 475 345 14 600 600 游戏id最大电流 12 500 420 13 475 345 14 600 600 我尝试过类似的方法,但运气不佳,无法解决:( 从日期>='2013-06-19'的玩家中选择游戏id,最大(玩家)为最大,玩家为当前玩家,按日期排序按游戏id描述组 谢谢你的帮助!如何查询mysql表以获取列的当前值和当天的最大值,mysql,sql,group-by,sql-order-by,Mysql,Sql,Group By,Sql Order By,我有一张像这样的桌子。每个游戏id每5分钟更新一次 game_id players date 12 420 2013-06-19 12:30:00 13 345 2013-06-19 12:30:00 14 600 2013-06-19 12:30:00 12 375 2013-06-19 12:25:00 13 475 2013-06-19 12:25:00
select game_id, max(players) as max, players as current from players where date >= '2013-06-19' group by game_id order by date desc ;
要获取最后一个值,您需要一种或另一种技巧。此版本不使用联接,而是使用
子字符串\u index()
/组\u concat()
技巧:
select game_id, max(players) as MaxPlayers,
substring_index(group_concat(players order by date desc), ',', 1) + 0 as Latest
from players
group by game_id;
这种方法的好处在于,它可以保证工作,并且不需要任何额外的连接
特别是,它没有使用MySQL扩展,允许列包含在select
子句中,而不在group by
子句中。当存在多个值时,结果是不确定的,如下面的
您可以使用此功能通过避免
不必要的列排序和分组。但是,这很有用
主要是当每个未聚合列中的所有值未在中命名时
每个组的分组依据相同。服务器可自由选择
每个组中的任何值,因此,除非它们相同,否则
选择是不确定的
要获取最后一个值,您需要一种或另一种技巧。此版本不使用联接,而是使用
子字符串\u index()
/组\u concat()
技巧:
select game_id, max(players) as MaxPlayers,
substring_index(group_concat(players order by date desc), ',', 1) + 0 as Latest
from players
group by game_id;
这种方法的好处在于,它可以保证工作,并且不需要任何额外的连接
特别是,它没有使用MySQL扩展,允许列包含在select
子句中,而不在group by
子句中。当存在多个值时,结果是不确定的,如下面的
您可以使用此功能通过避免
不必要的列排序和分组。但是,这很有用
主要是当每个未聚合列中的所有值未在中命名时
每个组的分组依据相同。服务器可自由选择
每个组中的任何值,因此,除非它们相同,否则
选择是不确定的
我现在还没有配置mysql数据库来测试这一点,但我认为它将为您提供所需的结果
我现在没有配置mysql db来测试这一点,但我认为它会给你想要的结果。这得到了正确的最大值,但没有得到正确的最大值,但是没有得到正确的最大值,但是没有得到正确的最新值谢谢,但是它仍然没有正确返回正确的f值还是现在column@nevermind…请在我下面的回答中引用。您使用的是MySQL功能,文档明确指出该功能不可靠。@GordonLinoff,太好了,我刚刚尝试过…但失败:)。我正在读你的答案,并在学习谢谢,但它仍然无法正确返回当前值的正确值column@nevermind . . . 请在我下面的回答中引用。您使用的是MySQL功能,文档明确指出该功能不可靠。@GordonLinoff,太好了,我刚刚试过。。。失败:)。我正在读你的答案,并在学习
select
t.game_id
, maxes.max_players as max
, t.players as current_players as current
from
(
select
t.game_id
, max(t.players) as max_players
, max(t.date) as max_date
from
t
where
t.game_id = :game_id
and t.date >= :todays_date
group by
t.game_id
) maxes
inner join t on t.game_id = maxes.game_id and t.date = maxes.max_date
where
t.date >= :todays_date