首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >渐进式递增日期时间字段Mysql创建视图

渐进式递增日期时间字段Mysql创建视图
EN

Stack Overflow用户
提问于 2019-10-21 16:24:16
回答 2查看 58关注 0票数 0

我想在mysql的两个表之间创建一个视图。

tbl1

代码语言:javascript
复制
| id_tbl1 | start_date          | delay | 
+---------+---------------------+-------+
|    1    | 2019-10-11 10:00:00 |  30   |
|    2    | 2019-10-12 18:00:00 |  0    |

tbl2

代码语言:javascript
复制
| id_tbl2 | id_tbl1 | user   | 
+---------+------------------+
|    1    |    1    |  Andy  |
|    2    |    1    |  Luke  |
|    3    |    2    |  Joe   |
|    4    |    1    |  Susy  |
|    5    |    2    |  Rick  |

我希望通过添加delay字段的值来逐步递增datetime字段。

结果应该是这样的

view1

代码语言:javascript
复制
| 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 |

编辑-我想增加秒数

有可能做到这一点吗?

我怎么能这么做呢?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-10-21 16:28:03

您可以使用joinrow_number()对其进行寻址

代码语言:javascript
复制
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

代码语言:javascript
复制
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 |
票数 2
EN

Stack Overflow用户

发布于 2019-10-21 16:28:06

这是您的查询,您可以将您的delay列添加为start_date字段的interval

代码语言:javascript
复制
select t1.id_tbl1 , t1.user
    , case when t1.id_tbl2 = 1 then t1.start_date
        else t1.start_date + interval t2.delay * (id_tbl2 - 1) second end
from tbl2 t1
left join tbl1 t2 on t1.id_tbl1 = t2.id_tbl1 

或者,由于您正在创建一个视图,您可能想要联接一个变量。

代码语言:javascript
复制
select t1.id_tbl1 , t1.user
    , t1.start_date 
            + interval t2.delay * (@curRow:=@curRow + 1) second
            - interval t2.delay second
from tbl2 t1
left join tbl1 t2 on t1.id_tbl1 = t2.id_tbl1 
join (select @curRow := 0) r;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58482423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档