【问题标题】:MySQL - How can I get a row multiple times based on a value of the row? [duplicate]MySQL - 如何根据行的值多次获取一行? [复制]
【发布时间】:2020-04-13 08:45:42
【问题描述】:

我有一个这种格式的事件表:

ID | NAME | DATEFROM | DATEUNTIL
1 Event1 2019-12-01 2019-12-03
2 Event2 2019-12-07 2019-12-08
3 Event3 2019-12-11 2019-12-12

我需要检索所有事件,但不是DATEFROMDATEUNTIL,它应该是这样的:

ID | NAME | DATE
1 Event1 2019-12-01
1 Event1 2019-12-02
1 Event1 2019-12-03
2 Event2 2019-12-07
2 Event2 2019-12-08
3 Event3 2019-12-11
3 Event3 2019-12-12

我应该使用什么查询?

非常感谢。

【问题讨论】:

  • 通常情况下,将加入一个“所有”日期表;在最新版本的 MySQL 中,CTE 可用于生成类似于此类日期表的内容。您使用的是哪个版本的 MySQL?
  • 检查这里:w3schools.com/php/php_mysql_select.asp 或检查 crud 系统

标签: mysql sql loops date


【解决方案1】:

如果您运行的是 MySQL 8.0,则可以使用递归 cte 来执行此操作:

with recursive cte as (
    -- this is your anchor
    select id, name, datefrom, dateuntil from mytable
    union all
    -- expand the dataset by incrementing "datefrom" until it reaches "dateuntil"
    select id, name, datefrom + interval 1 day, dateuntil
    from cte
    where datefrom < dateuntil
)
select id, name, datefrom date from cte order by id, date

Demo on DB Fiddle

编号 |姓名 |日期 -: | :----- | :--------- 1 |事件1 | 2019-12-01 1 |事件1 | 2019-12-02 1 |事件1 | 2019-12-03 2 |事件2 | 2019-12-07 2 |事件2 | 2019-12-08 3 |活动3 | 2019-12-11 3 |活动3 | 2019-12-12

【讨论】:

    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多