我在比较我的表格时遇到了两难境地。
我的问题是,我想得到每笔钱,这取决于定价。这是表格。
主表
main_id main_price main_date_created
25 8.5 2019-08-16
26 11.5 2019-08-01
总表
id main_id total_price date_generated
1 25 10 2019-08-16
2 25 10 2019-08-17
3 25 10 2019-08-18
4 25 10 2019-08-19
5 25 10 2019-08-20
6 25 10 2019-08-21
7 26 20 2019-08-01
8 26 5 2019-08-02
9 26 5 2019-08-03
10 26 10 2019-08-04
历史价格表
id main_id changed_main_price price_date_changed
1 25 15 2019-08-18
2 26 20 2019-08-03
我不知道是否有办法仅通过使用MySQL来做到这一点,我试图实现的是,Total table
将按MONTH和YEAR求和,并将乘以其指定价格,这取决于价格是否发生变化的日期。 每个月的总和将通过与Main table
中的main price
相乘来生成,但如果价格已从其原始价格更改为Price history table
如果条件是可能的,输出应该是这样的:
id main_id total_price price_generated (which is the prices) date
1 25 170 (10+10*8.5) 8.5
2 25 610 (10+10+10+10*15) 15
3 26 287.5 (20+5*11.5) 11.5
4 26 300 (5+10*20) 20
这是我现有的查询,
SELECT m.main_id
, m.main_price
, SUM(t.total_price) total_generated
, t.date_generated
FROM main m
INNER JOIN total t
ON m.main_id = t.main_id
GROUP
BY MONTH(t.date_generated);
我知道我的查询还不够,我仍然不知道我的想法是否真的可能:(。
我绞尽脑汁。 哈哈哈 这是你要追求的吗?
SELECT pricelist.id, pricelist.price, SUM(t.total_price), SUM(t.total_price) * pricelist.price,
year( pricelist.latestdate), month(pricelist.latestdate),
year( t.total_date_generated), month(t.total_date_generated)
from totaltable as t
LEFT JOIN (
(
select main_id as id, main_price as price, main_date_created as latestdate
from maintable
)
UNION ALL
(
select total_main_id, changed_main_price , price_date_changed
from pricehistorytable
)
) as pricelist on pricelist.id = t.total_main_id
GROUP BY pricelist.id , t.total_price, pricelist.price,
year( pricelist.latestdate), month(pricelist.latestdate),
year( t.total_date_generated), month(t.total_date_generated) ;