根据近似值选择行

时间:2015-02-09 20:00:24

标签: mysql sql date

我有一张桌子上有一些商品的价格 日期,例如:

        2014-01-10      $120
        2014-01-11      $121
        2014-01-13      $119
        2014-01-15      $118

我想创建一个可以填补缺失的视图 价格,即。引用现有价格,并返回 如果特定日期的价格未知,可能是最后的已知价格 如果产品从市场上消失,则有合理的限制:

    2014-01-10      $120
    2014-01-11      $121
    2014-01-12      $121
    2014-01-13      $119
    2014-01-14      $119
    2014-01-15      $118
    2014-01-16      $118
    2014-01-17      $118
    2014-01-18      $118
    ..........
    2014-02-01      NULL

如果只是计算价格一次,我 可能会使用一个函数,但我需要稍后组合 带有其他表的数据的数字,日期是常见的 字段。

    2014-01-10      $120    data a
    2014-01-11      $121    data b
    2014-01-12      $121    data c
    2014-01-13      $119    data d
    2014-01-14      $119    data e
    2014-01-15      $118    NULL
    2014-01-16      $118    NULL
    2014-01-17      $118    data f
    2014-01-18      $118    data g

通常,在12日,14日和15日之后,价格字段会 返回NULL,我想避免,因为它会破坏计算 稍后使用这些数据。

如果您认为视图构造不是最好的 解决方案在这里,我很感激指出我正确的方向 - 正如您所看到的,数据库不是我最深的领域 专业知识。 ;)

1 个答案:

答案 0 :(得分:0)

如果您有所关注的所有日期的列表,那么您可以使用相关子查询来获取价格:

select d.*,
       (select p.price
        from prices p
        where p.date <= d.date
        order by p.date desc
        limit 1
       ) as price
from dates d;

这与MySQL视图兼容 - 子查询位于select子句中,而不是from子句中。