You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询投注数据库用户连胜的SQL结果异常,求错误排查

问题原因

  1. 核心错误出在计算RunGroup的子查询未限定用户范围
    你内层统计RunGroup的语句中,FROM bets G没有添加G.user = GR.user的过滤条件,导致计算分组时混入了其他用户的投注记录,不是单独针对user=4的记录计算连续组,因此把实际的3连胜错误拆分到了不同的RunGroup中,最终统计出来的连胜场次偏小。
  2. 潜在的Pending状态逻辑问题
    你的数据中存在Pending状态的记录,当前逻辑只要result不相等就会生成新的分组,如果你的业务规则是Pending状态不中断连胜(仅Loss中断),需要调整不等判断的逻辑,避免Pending错误切断连胜序列。

修正后的SQL语句

SELECT * 
FROM (SELECT Result, 
  MIN(date) as StartDate, 
  MAX(date) as EndDate, 
  COUNT(*) as Games
  FROM (SELECT *,
    (SELECT COUNT(*) 
    FROM bets G 
    WHERE G.user = GR.user -- 新增同用户过滤条件
      AND G.result <> GR.result
      AND G.date <= GR.date) as RunGroup 
FROM bets GR WHERE user = 4 ORDER BY date DESC) A
GROUP BY result, RunGroup
ORDER BY Min(date)) A 
WHERE result = 'Win'
ORDER BY Games DESC

如果需要Pending不打断连胜,可将RunGroup的计算条件调整为:

WHERE G.user = GR.user 
  AND G.result = 'Loss' 
  AND GR.result = 'Win'
  AND G.date <= GR.date

关于LIMIT 1的疑问

修复上述错误后,如果你只需要获取最长的一条连胜记录,在语句末尾添加LIMIT 1是可以满足需求的。注意如果存在多条相同最大连胜场次的记录,LIMIT 1只会返回按Games DESC排序后的第一条,如果你需要返回所有场次并列最大的连胜记录,可以改用窗口函数RANK()来筛选排名为1的记录。

内容的提问来源于stack exchange,提问作者MomasVII

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:15:02