【问题标题】:Mysql Select Max Consecutive Records (with gaps)Mysql 选择最大连续记录(有间隙)
【发布时间】:2019-07-10 06:58:05
【问题描述】:

我在选择连续记录时遇到问题,我想我已经指出了问题所在。我认为这与 id 字段的跳转有关。

我在这里设置了一些示例数据: https://www.db-fiddle.com/f/fqSixe8TBPu7s7Ko22ySmr/0

基本上,我使用以下代码返回玩家最大连续获胜次数:

set @player=0, @count=0;
select max(@count := if(outcome = 2 and player = 785, @count+1, 0))
from cc6_MensLeague_rounds use index(maxcon);

上述样本数据中的结果是13(应该是24)。

它适用于大多数玩家,但我在选择少数玩家时得到了意想不到的结果。在四处挖掘之后,我注意到它可能是某些记录的 id 字段的跳跃。我需要以某种方式忽略这些差距。

如果有人有解决方案,或者可以为我指出正确的方向,那就太好了。

谢谢。

【问题讨论】:

  • 你为什么选择 1 和 2,而不是更传统的 0 和 1?
  • 顺便说一下,你可以用十几行而不是 1000 行来有效地说明这个问题。:-(
  • 嗨 Strawberry,出于简单的原因,我只是将数据转储到 db-fiddle.com 中,以便我使用数据库中完全相同的数据。至于使用 1 和 2 而不是 0 和 1。我对 MySQL 有点陌生,当我最初制作 DB 时,当时并没有真正考虑过。

标签: mysql select count max


【解决方案1】:

以下查询似乎对我有用:

SET @count=0;

SELECT max(@count := if(outcome = 2, @count+1, 0)) AS MAX_CONSECUTIVE_WINS
FROM 
 (SELECT *
  FROM cc6_MensLeague_rounds
  WHERE player = 785
  ORDER BY date ASC) AS Temp

如果它并不总是有效,请告诉我:)

【讨论】:

  • 完美...绝对的天才 :-) 你愿意更进一步吗?我有以下示例数据db-fiddle.com/f/35EQE2yzdxNs3KHZnQkMuQ/1,我想让 785 动态化。我尝试了以下代码select max(@count := if(outcome = 2, @count+1, 0)) as max_consecutive_wins from (select * from cc6_MensLeague_rounds where player = id order by date asc) as temp,结果为 1,我还尝试了... where player = cc6_MensLeague_players.id ...,结果为“where 子句”中的未知列有没有办法将玩家 ID 传递给此查询?
  • 我不太清楚你所说的让 785 动态化是什么意思?你想得到所有玩家的结果,还是只想让 785 变量?
  • 是的,这正是我想说的。不过我想通了。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 2019-01-28
  • 2012-05-18
  • 2013-01-10
相关资源
最近更新 更多