Mysql 根据近似值选择行

Mysql 根据近似值选择行,mysql,sql,date,Mysql,Sql,Date,我有一张桌子,上面有一些商品的价格 日期,例如: 2014-01-10      $120         2014-01-11      $121         2014-01-13      $119         2014-01-15      $118 我想创建一个视图来填充缺少的部分 价格,即在可用的情况下引用现有价格,并返回 最后已知价格如果某一天的价格未知,也许 如果产品从市场上消失,有合理的限制: 2014-01-10      $120 2

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

        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
如果只是计算一下价格的问题,我 可能会为此使用函数,但我需要稍后进行组合 数据来自日期为通用日期的其他表格 场

通常,在12日、14日和15日之后,价格字段将 返回NULL,这是我想要避免的,因为它会破坏 稍后使用数据

如果您认为视图构造不是最好的 在这里,我很感激为我指明了正确的方向 -正如你所看到的,数据库不是我最感兴趣的领域
专业知识

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

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子句中。

坦率地说,目前我甚至不知道如何解决这个问题。我的SQL知识并不比使用select的基本select、insert和create视图深多少。我认为最好是在没有找到值时执行返回null的查询,然后在应用程序逻辑中填充值。无论如何,你都会在数据上循环。按日期排序,并在非空时从每行中获取价格。当你看到一个空值时,把它换成你看到的最后一个。你有一个包含所有日期的表吗?还没有,但如果需要的话,我可以创建它。哇。。。它起作用了我花了一段时间才理解它是如何工作的,但后来我设法将它扩展到包括一种产品。现在我有事情要做。谢谢
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;