我有一个包含以下列的数据库

userId  | win   | startTime
1         1       1483113030149
2         1       1483110804384
1         0       1483109032694
1         1       1483105707639
2         0       1483096891200
1         1       1483017584986
1         0       1483000326940

现在我想知道连续获胜的最大值是什么(对于球员1来说是2)。
如何编写SQL查询?这是可能的还是有其他选择?
换言之,在下面的查询中,必须放置什么来代替“一行中的最大数量”?
SELECT
    maximum amount of wins IN a ROW
FROM
    TABLE
WHERE
    userId = 1
AND startTime > 1483000000000
ORDER BY
    startTime DESC

最佳答案

我提议一个三步查询:
为了每一场胜利,找出最接近的失败
以同样最接近的失败来计算胜负
选择最大计数
当starttime对于每个用户id都是唯一的时,查询工作得最好。

SELECT seqs.userid,
       Max(wins) AS `longest series`
FROM   (SELECT iq.userid,
               Min(iq.starttime) starttime,
               iq.endtime,
               Count(*)          wins
        FROM   (SELECT tf.userid,
                       tf.win,
                       tf.starttime,
                       (SELECT Min(tl.starttime)
                        FROM   t tl
                        WHERE  tl.userid = tf.userid
                               AND tl.win = 0
                               AND tl.starttime > tf.starttime) endtime
                FROM   t tf
                WHERE  tf.win = 1) iq
        GROUP  BY iq.userid,
                  iq.endtime) seqs
GROUP  BY seqs.userid

sqlfiddle
正如@gwc所指出的:这个查询不会返回从未赢过的用户。您可以用Count(*)替换Sum(iq.win)并删除WHERE tf.win = 1以包含它们。看这个sqlfiddle

关于mysql - SQL:一行中有特定值的行数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41399165/

10-11 07:17