我有一个看起来像这样的工作表:
**jobs**
job_id | customer_id | date
------------------------------------
| 1 | 1 | 2012-01-03 |
| 2 | 2 | 2013-02-04 |
| 3 | 1 | 2013-03-05 |
| 4 | 3 | 2013-05-04 |
然后我有一个看起来像这样的产品表:
**products**
product_id | description | price
-----------------------------------
| 1 | prod_1 | 25.50 |
| 2 | prod_2 | 34.95 |
最后,当价格发生变化时,我有一个这样的 product_price_changes 表:
**product_price_changes**
price_change_id | product_id | price_change_date | old_price
---------------------------------------------------------------
| 1 | 1 | 2013-01-01 | 20.00 |
| 2 | 1 | 2013-02-05 | 23.00 |
在 (product_id,price_change_date) 上有一个 UNIQUE INDEX
我想创建一个 VIEW 来获取反映工作完成之日起价格的产品定价。
使用上面的数据,应该创建一个像这样的表:
**view_job_pricing**
job_id | product_id | price
------------------------------
| 1 | 1 | 20.00 |
| 1 | 2 | 34.95 |
| 2 | 1 | 23.00 |
| 2 | 2 | 34.95 |
| 3 | 1 | 25.50 |
| 3 | 2 | 34.95 |
| 4 | 1 | 25.50 |
| 4 | 2 | 34.95 |
所以它应该选择日期最高的产品价格变化,它仍然小于工作日期,如果存在,则应该抓住当前的产品价格。
我有这个有效的:
CREATE VIEW view_job_pricing
AS
SELECT j.job_id, p.product_id, MAX(price_change_date),
IFNULL(ppc.old_price,p.price) AS price
FROM products p
JOIN jobs j
LEFT JOIN product_price_changes ppc
ON p.product_id = ppc.product_id AND date < price_change_date
GROUP BY job_id, product_id;
但在真正的数据库上它是相当慢的(更多的工作和产品)。只是想知道是否有更好的方法。谢谢!