抓住导致前一行总和的第一行大于10

时间:2017-04-29 15:47:29

标签: mysql sql

我遇到了一个问题,在创建有效的SQL时,我似乎无法解决这个问题。

以下是mysql设置:

id | countValue | name
 1 |    1       | b
 2 |    1       | b
 3 |    4       | b
 4 |    6       | b
 5 |    1       | b

我想要做的是抓住前一行(ORDER BY ID DESC)的sum(countValue)变得大于10的最早行

所以在这种情况下它会返回:3

它会返回3因为:

5.countValue + 4.countValue + 3.countValue = 12

所以它会返回id = 3

我最初的尝试:

 SELECT id FROM user WHERE sum(countValue) > 3 ORDER by id DESC

然后我改为:

  SELECT id From users WHERE HAVING SUM(countValue) > 10 ORDER BY id DESC

如果个别countValue中包含10个以上,则第二个将仅返回id。我需要以前值的总和,这就是我被卡住的原因。

希望这是有道理的,并且会喜欢你们可以提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

您想要的是累积或运行总和。在MySQL中,最好的方法是使用变量:

select u.*
from (select u.*, (@s := @s + countValue) as runningCV
      from users u cross join
           (select @s := 0) params
      order by u.id desc
     ) u
where runningCV - countValue <= 10 and runningCV > 10;

变量@s用于计算累积和。外部where子句返回超过“10”阈值的第一个值。

您也可以使用相关子查询执行此操作。但是,除非你的数据很小,否则这将是昂贵的。