MySQL,比较它们后递归添加两列

时间:2016-07-19 03:33:09

标签: mysql sql mysql-workbench

这是我的表数据:

   ID   val   Coulmn1  Column2
   1     1     0.4000    0
   1     10    0.1250    0    
   1     18    0.1429    0
   1     26    0.2500    0
   2     13    0.0000    0
   2     21    0.1429    0
   2     29    0.2500    0
   2     34    0.3333    0
   3      6    0.3333    0
   3      7    0.20      0
   3     14    0.2500    0
   3     22    0.1429    0
   3     33    0.2500    0
   4      8    0.2000    0
   4     15    0.1250    0
   4     23    0.1429    0
   4     31    0.0000    0

如果column1大于同一行中的column2,我想添加到列,如果最终值为max,则应该应用于同一个id的所有行。

我有以下情况。

if (Column1 > Column1 ) 
then (Column1 + Column1 )
else (Column1 )    

输出可以是:

       ID   val   Coulmn1    Column2
       1     1     0.4000    0.4000    
       1     10    0.1250    0.4000         
       1     18    0.1429    0.4000 
       1     26    0.2500    0.4000 
       2     13    0.0000    0.39285
       2     21    0.1429    0.39285
       2     29    0.2500    0.39285
       2     34    0.3333    0.39285
       3      6    0.3333    0.3333
       3      7    0.20      0.3333
       3     14    0.2500    0.3333
       3     22    0.1429    0.3333
       3     33    0.2500    0.3333
       4      8    0.2000    0.2
       4     15    0.1250    0.2
       4     23    0.1429    0.2
       4     31    0.0000    0.2

任何支持性链接或解决方案 提前致谢

2 个答案:

答案 0 :(得分:2)

您需要max()窗口功能:

select t.*, max(column1) over (partition by id) as column2
from t;

MySQL不支持窗口功能。您可以使用joingroup by

执行此操作
select t.*, tt.column2
from t join
     (select id, max(column1) as column2
      from t
      group by id
     ) tt
     on t.id = tt.id;

答案 1 :(得分:2)

试试这个:

select
    t1.id, t1.val, t1.column1,
    t2.col as column2
from yourtable t1
join (
    select 
        max(tmp.col) as col, 
        id
   from (
       select 
           yourtable.*,
           @col := case when @grp = id then 
                        case when @col < column1 then @col + column1 else @col end
                        else column1 end as col,
           @grp := id
       from yourtable
       cross join (select @col := 0, @grp := null) t
       order by id, val
   ) tmp
   group by id
) t2 on t1.id = t2.id

这几乎适用于所有数据库。

以下是mysql的演示:SQLFiddle Demo