我在数据库里有一张简单的桌子。该表具有date_start,而added_days column.This是具有普通SELECT的表。
id date_start added_days
1 2017-10-10 2
2 2017-10-10 4
3 2017-10-10 6
4 2017-10-10 6
5 2017-10-10 3我知道如何将天添加到date_start列中。但是,如何使date_start值与前一个date_start相同
我现在的SELECT
SELECT DATE_ADD(date_start, INTERVAL added_days DAY) AS 'new_date',added_days FROM test
id new_date added_days
1 2017-10-12 2
2 2017-10-14 4
3 2017-10-16 6
4 2017-10-16 6
5 2017-10-13 3我的预期产出:
id new_date added_days
1 2017-10-10 2
2 2017-10-12 4
3 2017-10-16 6
4 2017-10-22 6
5 2017-10-28 3 小提琴
注:
我也接受PHP解决方案,如果它在MySQL中是不可接受的
发布于 2017-11-27 04:00:37
这个概念可以用这个答案需要的方式来完成。我使用MySQL变量,像一个内联程序。
select
@lastDate := date_add( if( @lastNumDays = 0, date_start, @lastDate ), INTERVAL @lastNumDays DAY ) as new_Date,
@lastNumDays := added_days as added_days
from
YourTable ,
( select @lastDate := '2017-01-01',
@lastNumDays := 0 ) SQLVars;"SQLVARS“别名用于在线创建变量.一个虚假的地点持有人日期,最后的天数违约为0,因此实际上没有添加任何天数。
select字段将使用--在第一次传递实际日期时--将零天作为开始添加到其中,然后将该值设置到@lastDate变量中,以便在下一个记录上使用。下一个字段将天数分配到@lastNumDays变量中,用于下一个记录的"Date_Add()“过程。
我的工作解决方案可以在演示找到
澄清。
两个变量用于保留“最后一个日期”,一个用于在当前记录之后提前的天数。所以,为了按顺序处理行,把它当作.
@lastDate = '2017-01-01‘--只是一个位置持有者--声明变量@lastNumDays =0--另一个位置持有者,用于随后添加到基准日期
第一个记录,IF()被应用,@lastNumDays = 0,因此它将"Date_Start“放入@lastDate变量,但成为"New_Date”列。接下来,将added_Days存储到@lastNumDays变量中,并成为"added_Days“列。
因此,在根据样本数据处理第一行的末尾,
@lastDate = '2017-10-10' and
@lastNumDays = 2现在,我们进入数据的第二行。IF()在@lastNumDays中有一个值,并使用@lastDate,并向其添加2天。所以现在
@lastDate = '2017-10-12'
@lastNumDays = 4下一张唱片..。将添加的4天应用到10/12日期,并成为
@lastDate = '2017-10-16'
@lastNumDays = 6等等。现在,为开始日期有一个固定的列值这一事实可以通过将该列预先定义为起点来简化,但是我不知道您的环境、临时表/永久表等等来进行调用,这足以得到您想要的答案。
https://stackoverflow.com/questions/47503134
复制相似问题