我想问一下如何防止价格自动更新。
例如:
零件表有NAME,PRICE
2月21日,我创建了发票1,在那段时间内,1080 TI的价格为500美元
比2月28日价格变为650美元,同样我创建发票。
但问题是,当我更新零件表中的价格(发票2)时,发票1的价格也会从500 $变为650 $,我想阻止这种情况。
谁能告诉我怎么样?
答案 0 :(得分:1)
仅在创建发票时阅读价格。
创建发票时,将单价保存在发票行表格中。
或者,保存价格变更及其有效日期。然后,在提取发票价格时,查看最新日期早于或等于交货日期或发票日期的价格。
答案 1 :(得分:0)
此解决方案使用三个表。
零件
示例
+----------+--------+
| PartName | PartID |
+----------+--------+
| MyPart | 1 |
+----------+--------+
价格
示例
+--------+---------+------------+
| PartID | Price | StartDate |
+--------+---------+------------+
| 1 | £500.00 | 01/06/2017 |
| 1 | £650.00 | 01/02/2018 |
+--------+---------+------------+
发票
示例
+-----------+--------+-------------+
| InvoiceID | PartID | InvoiceDate |
+-----------+--------+-------------+
| 1 | 1 | 02/06/2017 |
| 2 | 1 | 01/03/2018 |
+-----------+--------+-------------+
此SQL将撤回发票日期的相关价格:
SELECT InvoiceID
, InvoiceDate
, PartName
, Price
FROM (Invoices Inv LEFT JOIN Parts ON Inv.PartID = Parts.PartID)
LEFT JOIN Prices P1 ON Inv.PartID = P1.PartID AND
Inv.InvoiceDate>=P1.StartDate
WHERE NOT EXISTS (
SELECT 1
FROM Prices P2
WHERE P2.PartID = P1.PartID AND
P2.StartDate<=Inv.InvoiceDate AND
P2.StartDate>P1.StartDate
)
示例
+-----------+-------------+----------+---------+
| InvoiceID | InvoiceDate | PartName | Price |
+-----------+-------------+----------+---------+
| 1 | 02/06/2017 | MyPart | £500.00 |
| 2 | 01/03/2018 | MyPart | £650.00 |
+-----------+-------------+----------+---------+
来源,因为我忘记了来龙去脉.... how-do-i-efficiently-get-the-most-recent-corresponding-row