这是我的表数据:
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
任何支持性链接或解决方案 提前致谢
答案 0 :(得分:2)
您需要max()
窗口功能:
select t.*, max(column1) over (partition by id) as column2
from t;
MySQL不支持窗口功能。您可以使用join
和group 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