我想在 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 |
编辑- 我想增加秒数
这有可能吗?
我该怎么做?
谢谢
最佳答案
您可以使用 join
和 row_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
。
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/