Mysql SQL计算连胜和连败

Mysql SQL计算连胜和连败,mysql,sql,Mysql,Sql,如果我有一个如下所示的SQL表,我如何计算当前的连胜或连败(以及按季节分组/重置连胜或连败)。我想更新表格并填写每条记录的条纹 所以对于#1,连胜将是“-1”;#2将是“1”;#3将是“2”,但一旦我们降到#7,它将再次重置为“1”。(+1表示“赢了1场”和-1表示“输了1场”等) 对于每一场比赛,计算与之前结果相同的比赛,这样中间就没有结果相反的比赛了。将结果存储在临时表中: CREATE TEMPORARY TABLE STREAK_TABLE SELECT ID, (

如果我有一个如下所示的SQL表,我如何计算当前的连胜或连败(以及按季节分组/重置连胜或连败)。我想更新表格并填写每条记录的条纹

所以对于#1,连胜将是“-1”;#2将是“1”;#3将是“2”,但一旦我们降到#7,它将再次重置为“1”。(+1表示“赢了1场”和-1表示“输了1场”等)


对于每一场比赛,计算与之前结果相同的比赛,这样中间就没有结果相反的比赛了。将结果存储在临时表中:

CREATE TEMPORARY TABLE STREAK_TABLE
SELECT
    ID,
    (
        SELECT 1 + COUNT(*)                 -- Earlier games with the same result, team and season.
        FROM YOUR_TABLE T2
        WHERE
            T1.Result = T2.Result
            AND T1.team = T2.team
            AND T1.season = T2.season
            AND T1.date > T2.date
            AND NOT EXISTS (
                SELECT *                    -- The games in between, with the same team and season but opposite result.
                FROM YOUR_TABLE T3
                WHERE
                    T2.Result <> T3.Result
                    AND T1.team = T3.team
                    AND T1.season = T3.season
                    AND T3.date BETWEEN T2.date AND T1.date
            )
    ) S
FROM YOUR_TABLE T1
DROP TABLE STREAK_TABLE
最后,清理临时表:

CREATE TEMPORARY TABLE STREAK_TABLE
SELECT
    ID,
    (
        SELECT 1 + COUNT(*)                 -- Earlier games with the same result, team and season.
        FROM YOUR_TABLE T2
        WHERE
            T1.Result = T2.Result
            AND T1.team = T2.team
            AND T1.season = T2.season
            AND T1.date > T2.date
            AND NOT EXISTS (
                SELECT *                    -- The games in between, with the same team and season but opposite result.
                FROM YOUR_TABLE T3
                WHERE
                    T2.Result <> T3.Result
                    AND T1.team = T3.team
                    AND T1.season = T3.season
                    AND T3.date BETWEEN T2.date AND T1.date
            )
    ) S
FROM YOUR_TABLE T1
DROP TABLE STREAK_TABLE

@Ray为编写良好的SQL查询,您还需要在此表中存储季节信息。季节信息是什么意思?我从未做过类似的事情,所以我很有可能忽略了一些事情,但据我所知,您需要提前聚合数据。据我所知,没有有效的方法将数据从该模式中提取出来,因为它需要遍历整个表。是的,我不寻求最佳效率,因为这个查询只需要运行一次。并对数据进行聚合。我只是不知道如何“将当前条纹设置为前一个条纹+1或-1”。