[英]How can select next row data into the current row result in MySQL?
拥有包含此类数据的 MySQL 表
code | amount | effective_from
a | 12000 | 7/1/2021
b | 12000 | 8/1/2021
d | 12000 | 7/1/2021
c | 9000 | 6/1/2021
b | 12000 | 15/1/2021
c | 1800 | 10/1/2021
b | 4500 | 21/1/2021
a | 4500 | 12/1/2021
c | 4500 | 20/1/2021
d | 4500 | 7/1/2021
a | 4500 | 17/1/2021
现在我想用下面的附加列提取数据:
code | amount | effective_from |effective_to
a | 12000 | 7/1/2021 | 12/1/2021
a | 4500 | 12/1/2021 | 17/1/2021
a | 4500 | 17/1/2021 | (null)
b | 12000 | 8/1/2021 | 15/1/2021
b | 12000 | 15/1/2021 | 21/1/2021
b | 4500 | 21/1/2021 | (null)
c | 9000 | 6/1/2021 | 10/1/2021
c | 1800 | 10/1/2021 | 20/1/2021
c | 4500 | 20/1/2021 | (null)
列 Effective_to 数据应该来自于effective_to
起始日期大于当前effective_from
起始日期的直接行的有效起始日期(如果可用),否则返回null
。
是否有任何解决方法或我重组我的数据库?
如果我理解正确,您需要一个具有range
规范的累积min()
:
select t.*,
min(effective_from) over (order by effective_from
range between interval 1 day following and unbounded following
) as effective_to
from t;
注意:这假设effective_from
是一个没有时间分量的日期。 如果有时间组件,您可能需要interval 1 second
。
这是一个 db<>fiddle。
在大多数这样的情况下,会有一个“实体”列,您需要该实体的下一个值。 在这种情况下,典型的逻辑是LEAD()
而不是累积最小值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.