如何查询mysql表以获取列的当前值和当天的最大值

如何查询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

我有一张像这样的桌子。每个游戏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描述组

谢谢你的帮助!

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