2016-07-19 9 views
1

後に2つの列を追加すると、これは私のテーブルデータである:のMySQL、再帰的にそれらを比較する

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のは、同じ行の列2より大きく、最終的な値が最大である場合にはそれが必要ならば、列に追加します同じ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 

任意の支援リンクまたは溶液事前

+0

私は、余分なデータベースタグを削除しました。実際に使用しているデータベースのタグを追加してください。 –

答えて

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

+0

おかげで迅速な対応 @のために感謝ですが、id = 2 column2の値を見て、 "0.3333" である持っているが、それは「0.1429 + 0.2500 = 0.39) どんな提案すべきですか? –

+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; 
+0

は、実際には単純なmax関数ではなく、その実行合計も同様です。 –

+0

@ Nomanuddin 。 。私には 'max()'のような感じです。私はid = 2があまり合わないと認めますが、id1,3、そして4は間違いなく行います。 –

+0

実際にid 1,3,4にid = 2のような同じタイプのデータもある場合、max()は機能しません。あなた@Gordon Linoff –

関連する問題