mysql中的表mytable
具有列col1和col2,其中整数非空值。它还有一个主键id
。在按特定顺序排列列之后,我需要计算列col1
和col2
的所有元素中的某个总和,如下所示:对于给定行中col2中的给定值,将其与col1在下一行的值。取这两个值中较小的一个,并从中减去col2取值的行中col1的值;对于最后一行,只需从col2中的值中减去该行中col1中的值。得到所有这些差异的总和。
我有以下解决方案似乎有效但可能会干扰用户缺少创建表或更改表结构的权限。它需要在创建表和一些列之前检查它们是否存在,除了需要在运行后清理之外,还要删除添加的列。
alter table mytable add my_id int(5) not null;
alter table mytable add col3 int(7) not null;
SET @count = 0;
UPDATE mytable SET my_id = @count:= @count + 1;
create temporary table mytable2 as select my_id, col1 from mytable limit 1, 99999;
update mytable a join mytable2 b on a.my_id = (b.my_id - 1) set a.col3 = b.col1;
update mytable set col3 = col2 order by my_id desc limit 1;
select sum(LEAST(col2,col3) - col1) from mytable;
问题:获得上述所需金额的更好方法是什么?
以下是一些示例数据:
id col1 col2
--------------------
11 609 618
42 620 628
23 624 630
34 627 637
Required Sum: (618-609) + (624-620) + (627-624) + (637-627) = 26