0

我正在使用 MySQL 5.5 来存储如下表:

sequence  category  value
1         A         100
2         A         200
3         A        -300  # sum becomes 0
4         B         200
5         B         500

对于每个类别,我想找到导致sum(value)该类别降至 0 以下的第一条记录(按顺序排序)。

我目前的解决方案是(SQL函数伪代码):

create function find_low_value(in_category) returns int
begin
  declare cursor select sequence, value from table where category = in_category;
  declare sum int default 0;

  open and fetch cursor;
  set sum = sum + value;
  if sum <= 0 then
    return sequence;
  end if;
end

但效率不高。有更好/更简单的解决方案吗?

谢谢。

4

2 回答 2

3

我不知道这是否算作“更好/更简单”,但您可以将其编写为常规 SQL 查询:

SELECT MIN(sequence)
  FROM ( SELECT t1.sequence
           FROM table_name t1
           JOIN table_name t2
             ON t2.category = t1.category
            AND t2.sequence <= t1.sequence
          WHERE t1.category = ...
          GROUP
             BY t1.sequence
         HAVING SUM(t2.value) <= 0
       )
;
于 2013-09-23T04:40:47.397 回答
0

从测试组中选择 min(id),category,sum(value) 作为 total_sum 按具有 total_sum<=0 的类别

于 2013-10-09T05:42:38.230 回答