在 mySQL 中重新索引日期列,并将缺少日期的行设置为 Null

问题描述 投票:0回答:1

假设我有一个下表: 表:

col1            col2            col3           col4
2010-01-02       1               2               3
2010-01-05       4               9               10
2010-01-09       1               2               3

正如您所看到的,col1 中有很多缺失的日期,我想为前几行获取类似的内容。

表2:

      col1            col2            col3           col4
    2010-01-02        1                2               3
    2010-01-03        null             null           null
    2010-01-04        null             null           null
    2010-01-05        4                9               10
    2010-01-06        null             null           null
    2010-01-07        null             null           null
    2010-01-08        null             null           null
    2010-01-09        1                2               3

有没有办法在 mySQL 中实现这一点。 我想到这样做: 使用此创建两个日期之间的所有日期:

with RECURSIVE CTE2 AS (
    SELECT '2010-01-02'::date AS date
    UNION ALL
    SELECT dr.date + interval '1 day'
    FROM CTE2 dr
    WHERE dr.date < '2010-01-09'::date
)
    select col1, col2,col3, col4, date
from CTE2
left join Table1 on CTE2.date = Table1.Col1;

但是,这仍然给出旧日期并删除其间的任何日期。有人可以帮忙吗。

sql postgresql common-table-expression reindex
1个回答
0
投票

当我尝试您的查询时,我收到错误,因为

dr.date + interval '1 day'
返回
timestamp
而不是
date
。添加
CAST
即可正常工作。

with RECURSIVE CTE2 AS (
    SELECT '2010-01-02'::date AS date
    UNION ALL
    SELECT cast(dr.date + interval '1 day' as date)
    FROM CTE2 dr
    WHERE dr.date < '2010-01-09'::date
)
    select col1, col2,col3, col4, date
from CTE2
left join Table1 on CTE2.date = Table1.Col1;

演示

© www.soinside.com 2019 - 2024. All rights reserved.