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;