代码之家  ›  专栏  ›  技术社区  ›  sbrbot

列出某些期间内的所有日期[已关闭]

  •  -4
  • sbrbot  · 技术社区  · 6 年前

    我有下表中的项目及其活动周期(周期定义为“开始”和“结束”日期):

    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
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   iSR5    6 年前

    你的意思是这样吗:

    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