我有两个数据集:
- 价格:2018年9月产品历史价格变动记录
- 销售:2018年9月产品销售记录使用任何数据整理工具计算每个产品的总收入和每个价格的收入。
谢谢。
价格(示例):
<表类>
product_id
old_price
new_price
updated_at
tbody><<tr>64 270000 239000 9/10/2018 4:37:00点 3954203 60000 64000 9/11/2018 10:59:00点 3954203 64000 60500 9/17/2018 11:54:00是 3998909 19000 17000 9/10/2018 4:35:00点 3998909 17000 15500 9/16/2018 5:09:00是 4085861 67000 62500 9/11/2018 8:51:00是 4085861 62500 58000 9/17/2018 3:35:00是 表类>
您可以使用两个子查询来确定特定日期的价格
如果下面找到的行在销售日期之前,则取最后一个new_price,否则取下一个可用日期的old_price。
第二个子选择是不必要的,如果您在所有销售日期之前为每个生产日期设置一个初始行,并且您拥有相同的old_price和new_price。
product表将从prodict_id和updated_at的组合INDEX中获益
SELECT
s.`product_id`
, s.`quantity_ordered`
,IFNULL(
(SELECT `new_price` FROM product p WHERE p.`product_id` = s.`product_id`
AND s.`ordered_at`>= p.`updated_at` ORDER BY `updated_at` DESC LIMIT 1)
,(SELECT `old_price` FROM product p WHERE p.`product_id` = s.`product_id`
AND s.`ordered_at`< p.`updated_at` ORDER BY `updated_at` ASC LIMIT 1))
p_price
, s.`ordered_at`
FROM sale s
ordered_at2018-09-09 18:37:00 2018-09-12 00:59:002018-09-10 13:54:002018-09-12 18:35:002018-09-18 07:09:002018-09-10 10:51:002018-09-19 05:35:00