我如何获得带有连续指标的总量?

How can i get the total amount with consecutive indicator?

所以这里是 table:

Name    Indicator   Amount
Anson       1         3.5
Anson       2         2.6
Anson       4         8.4
Anson       5         3.2
Ben         1         7
Ben         3         4.7
Ben         4         3.6

如果指标是连续的,如何获取总金额? 这是我想要的结果:

Name    Indicator   Amount
Anson       1,2       6.1
Anson       4,5       11.6
Ben         1         7
Ben         3,4       8.3

谢谢!

很遗憾,MySQL 没有 window 功能。但是,如果您有一个递增 1 的值序列,那么对于每个组,该序列与 Indicator 之间的差异将是恒定的。您可以使用变量创建这样的序列。

剩下的只是算术和聚合:

select name, group_concat(indicator), sum(amount)
from (select t.*, (@rn := @rn + 1) as rn
      from table t cross join
           (select @rn := 0) params
      order by name, indicator
     ) t
group by name, (rn - indicator)
order by name, min(indicator);

试试这个,它在 Oracle 中有效,所以我认为它应该在 mysql 中。不太好看。。。用Lag函数带上前一个名字的指标和金额。然后找出指标之间的差异并将金额相加。最后使用CASE语句对返回结果进行格式化。

select name, 
CASE diff WHEN 1 THEN to_char(prev_ind||','||indicator)
                                 ELSE to_char(indicator) END as Indicator,
CASE diff WHEN 1 then to_char(sum_amount) 
             else to_char(amounnt)   END as Amount
FROM (     
select name, indicator, prev_ind, sum(indicator-prev_ind) as diff, amounnt,
sum(amounnt + prev_amount) sum_amount
from (

select name, indicator, lag(indicator,1,0) over (order by name) prev_ind, amounnt,
lag(amounnt,1,0) over (order by name) prev_amount
from tmp1
order by name, indicator

)
group by  name, indicator, prev_ind, amounnt
order by name, indicator)
where diff != 2
order by name;