假设我有一个下表: 表:
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;
但是,这仍然给出旧日期并删除其间的任何日期。有人可以帮忙吗。
当我尝试您的查询时,我收到错误,因为
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;