gpt4 book ai didi

mysql - SQL:具有特定值的一行中有多少行

转载 作者:行者123 更新时间:2023-11-29 02:46:34 26 4
gpt4 key购买 nike

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

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

最佳答案

我提出一个三步查询:

  1. 对于每一次胜利,找到最接近的失败
  2. 计算最接近输的赢
  3. 选择最大计数

当开始时间对于每个用户 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com