【发布时间】:2014-05-12 15:13:26
【问题描述】:
我有 2 个表格,我想在其中计算一个值。一张表提供历史的每日价格数据(价格),而第二张表包含包含历史数据和预测数据的年度数据(交易量)。到目前为止,我可以加入这两个表,这样我就可以通过每日对应日期的价格来计算历史年度价值,但不能计算未来的年度价值,我想根据最后的每日价格计算价格表。
当前表结构
Table 1: Prices (3 fields: date,code,price)
Table 2: Volumes (3 fields: date,code,units)
当前查询
SELECT v.date,p.price,v.units,CONCAT(p.price*v.units) AS Value
FROM Prices p,Volumes v
WHERE p.code = v.code AND p.date = v.date
AND v.code = 'X' AND (v.date BETWEEN '2012-12-31' AND '2016-12-31')
GROUP BY v.date
ORDER BY v.date
LIMIT 5;
2012-2013 年数据而不是 2012-2016 年的结果:
date 2012-12-31 2013-12-31
price 50 58
units 100 90
Value 5000 5220
我的年表(成交量)有 2014、2015 和 2016 年的成交量估计(未显示),日表(价格)中的最后一个价格是 65,但上面的查询只会匹配成交量每日价格表中的相应日期值,而不是使用最接近的最后一个值。有人可以建议我如何最好地做到这一点吗?
表格示例(注意:两个表格都使用围绕“日期”和“代码”的复合主键)
音量
date code units
2012-12-31 X 100
2012-12-31 Y 50
2013-12-31 X 90
2013-12-31 Y 45
2014-12-31 X 95
2014-12-31 Y 47
价格
date code price
2013-12-31 X 50
2013-12-31 Y 25
2014-01-01 X 58
2014-01-01 Y 27
2014-01-02 X 59
2014-01-02 Y 30
-----
2014-03-31 X 48
2014-03-31 Y 26
2014-04-01 X 49
2014-04-01 Y 27
last data point
【问题讨论】:
-
你能发布一些示例数据或 sql fiddle 吗?而且我不完全确定您的问题是什么……您想要 2012 年至 2016 年之间的“价值”计算是什么?
-
我不确定您的意思,但是这两个表的日期字段(例如 yyyy-mm-dd)与代码字段(例如 X、Y、Z)和两者都相似其中是每个表中的复合主键。 Volumes 表中的“units”和 Prices 表中的“Price”是整数。
-
我的意思是你能从你想要的日期范围内发布两个表中的 5-10 行数据吗?
-
我不认为我可以在这里输入格式化表格,但是每日价格表会有每日历史日期数据(例如'2013-10-15'、2013-10-16'等) 而体积年表,日期数据将是年底的(例如,'2013-12-31'、'2014-12-31'、'2015-12-31'等)。因此,我的上述查询可以选择它们在两个表中匹配的日期,但不能选择未来的年度数据,因为每日价格数据仅包含历史价格值。我需要的是从每日数据中获取最后可用的价格来计算未来的年度价值。
-
添加的表格示例。希望清楚一点