Mysql创建 View 并逐渐增加日期时间字段

标签 mysql sql database date window-functions

我想在 mysql 中的两个表之间创建一个 View 。

第 1 期

| id_tbl1 | start_date          | delay | 
+---------+---------------------+-------+
|    1    | 2019-10-11 10:00:00 |  30   |
|    2    | 2019-10-12 18:00:00 |  0    |

tbl2

| id_tbl2 | id_tbl1 | user   | 
+---------+------------------+
|    1    |    1    |  Andy  |
|    2    |    1    |  Luke  |
|    3    |    2    |  Joe   |
|    4    |    1    |  Susy  |
|    5    |    2    |  Rick  |

我想通过添加延迟字段的值来逐步增加日期时间字段。
结果应该是这样的

View 1

| id_tbl1 | user  | start_date       |
+---------+-------+------------------+
|    1    | Andy  | 2019-10-11 10:00:00 |
|    1    | Luke  | 2019-10-11 10:00:30 |
|    1    | Susy  | 2019-10-11 10:01:00 |
|    2    | Joe   | 2019-10-12 18:00:00 |
|    2    | Rick  | 2019-10-12 18:00:00 |

编辑- 我想增加秒数

这有可能吗?
我该怎么做?
谢谢

最佳答案

您可以使用 joinrow_number() 来解决这个问题:

select 
    t1.id_tbl1,
    t2.usr,
    date_add(
        t1.start_date, 
        interval (t1.delay * (row_number() over(partition by t1.id_tbl1 order by t2.id_tbl2 ) - 1)) second
    ) start_date
from tbl1 t1
inner join tbl2 t2 on t1.id_tbl1 = t2.id_tbl1 

注意:user 不是列名的好选择,因为它可能与保留字冲突。我将其更改为 usr

Demo on DB Fiddle :

with 
    tbl1 as (
        select 1 id_tbl1, '2019-10-11 10:00' start_date, 30 delay from dual
        union all select 2, '2019-10-12 18:00', 0 from dual
    ),
    tbl2 as (
        select 1 id_tbl2, 1 id_tbl1, 'Andy' usr from dual
        union all select 2, 1, 'Luke' from dual
        union all select 3, 2, 'Joe' from dual
        union all select 4, 1, 'Susy' from dual
        union all select 5, 2, 'Rick' from dual
    )
select 
    t1.id_tbl1,
    t2.usr,
    date_add(
        t1.start_date, 
        interval (t1.delay * (row_number() over(partition by t1.id_tbl1 order by t2.id_tbl2 ) - 1)) second
    ) start_date
from tbl1 t1
inner join tbl2 t2 on t1.id_tbl1 = t2.id_tbl1;

| id_tbl1 | usr  | start_date          |
| ------- | ---- | ------------------- |
| 1       | Andy | 2019-10-11 10:00:00 |
| 1       | Luke | 2019-10-11 10:00:30 |
| 1       | Susy | 2019-10-11 10:01:00 |
| 2       | Joe  | 2019-10-12 18:00:00 |
| 2       | Rick | 2019-10-12 18:00:00 |

关于Mysql创建 View 并逐渐增加日期时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58482423/

相关文章:

php - 如何知道名称是指 php 脚本中的 mysql 表还是 mysql View

sql - 检测整数序列中的间隙

mysql - 如果存在更新(没有唯一键)如何插入

Amazon Web 服务器中的 mySQL 连接

arrays - 如何在MongoDB中指定字段进行多条件查找查询?

MySql 嵌套存储过程调用

mysql - SQL:COALESCE() 函数的替代方法,将所有值分组到一列中

php - 使用 MySQL 进行计数/分组

mysql - 使用 GROUP_CONCAT 查询

database - 在数据库中存储类型时的最大 MIMEType 长度