【问题标题】:List all dates within some periods [closed]列出某些时期内的所有日期[关闭]
【发布时间】:2019-04-23 12:43:15
【问题描述】:

我有下面的项目表及其活动期间(期间用 FROM 和 TO 日期定义):

ID | ProjID | ActiveFrom | ActiveTo
===+========+============+============
 1 |     20 | 2018-01-01 | 2018-01-04
 2 |     20 | 2018-02-05 | 2018-02-07
 3 |     20 | 2018-02-20 | 2018-02-22
 4 |     30 | 2018-01-15 | 2018-02-15

一个项目有任意数量的活动期。

我需要一个查询来返回给定项目的所有活动日期。例如对于 ProjID=20,结果应该是:

2018-01-01
2018-01-02
2018-01-03
2018-01-04
2018-02-05
2018-02-06
2018-02-07
2018-02-20
2018-02-21
2018-02-22

【问题讨论】:

  • 你似乎已经转发了你的问题:stackoverflow.com/questions/53403238/…
  • 不,这不是同一个问题。
  • 但两者都有一个共同点:你还没有尝试过
  • 我在看下面的问题stackoverflow.com/questions/9295616 但希望会有更简单的解决方案
  • SO 不是代码编写服务。一旦您努力自己先解决问题并遇到困难,我们很乐意提供帮助。完成此操作后,您可以解释您遇到的问题,包括您努力解决问题的相关代码,并提出具体问题,我们将尽力提供帮助。在这个问题中,您绝对没有尝试或表现出任何自己做任何事情的努力。

标签: mysql sql


【解决方案1】:

你的意思是这样的吗:

SET @row_number = 0;
SELECT DATE_ADD(DATE_ADD(ActiveFrom, INTERVAL -1 DAY), INTERVAL x.D DAY) AS ActivityPeriods
FROM test
LEFT JOIN(SELECT *, (@row_number:=@row_number + 1) AS D  FROM information_schema.COLUMNS) AS x ON x.D <= DATEDIFF(ActiveTo,ActiveFrom) +1
WHERE 
    ProjID = 20
   ORDER BY ActivityPeriods

这会给你:

| ActivityPeriods |
| --------------- |
| 2018-01-01      |
| 2018-01-02      |
| 2018-01-03      |
| 2018-01-04      |
| 2018-02-05      |
| 2018-02-06      |
| 2018-02-07      |
| 2018-02-20      |
| 2018-02-21      |
| 2018-02-22      |

Fiddle Demo

【讨论】:

    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 2017-05-22
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多