繁体   English   中英

select 下一行数据如何进入当前行导致 MySQL?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM