【问题标题】:fill in data and missing dates填写数据和缺失的日期
【发布时间】:2015-06-04 14:24:30
【问题描述】:

我正在尝试使用 SQL 来获取我当前的查询结果:

+------------+------------+------------+ | STORE_NUM |价格 | DATE_CHNG | +------------+------------+------------+ | 100 | 1.50 | 2014-05-01 | | 100 | 1.52 | 2014-05-03 | | 100 | 1.48 | 2014-05-05 | | 100 | 1.51 | 2014-05-10 | +------------+------------+------------+

让它们看起来更像这样,其中缺少的日期被添加,但价格的价值也被填写:

+------------+------------+------------+ | STORE_NUM |价格 | DATE_CHNG | +------------+------------+------------+ | 100 | 1.50 | 2014-05-01 | | 100 | 1.50 | 2014-05-02 | | 100 | 1.52 | 2014-05-03 | | 100 | 1.52 | 2014-05-04 | | 100 | 1.48 | 2014-05-05 | | 100 | 1.48 | 2014-05-06 | | 100 | 1.48 | 2014-05-07 | | 100 | 1.48 | 2014-05-08 | | 100 | 1.48 | 2014-05-09 | | 100 | 1.51 | 2014-05-10 | +------------+------------+------------+

非常感谢任何帮助/建议/资源。

谢谢!

【问题讨论】:

  • 创建日期帮助表,加入。
  • 用代码而不是你的查询来做。
  • 如果失败,请使用谷歌。
  • 并标记您实际使用的数据库,而不是随机标记其中一些

标签: mysql sql sql-server postgresql


【解决方案1】:

试试:

SELECT "STORE_NUM", "PRICE", "DATE_CHNG" + x - 1 As "DATE_CHNG"
FROM (
  SELECT *,
       Lead("DATE_CHNG") OVER (Order By "DATE_CHNG" ) - "DATE_CHNG" As number_of_days
  FROM table1
) m,
LATERAL (
  SELECT generate_series( 1, 
                         CASE coalesce(m.number_of_days, 1)
                         WHEN 0 THEN 1
                         ELSE coalesce(m.number_of_days, 1) END) x
) y

演示 ==> http://sqlfiddle.com/#!15/3c5a47/2


此查询仅适用于 9.3 版本,早期版本不支持横向连接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2018-05-02
    • 2018-10-05
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多