【发布时间】:2019-07-16 09:52:30
【问题描述】:
我已经四处寻找解决方案,但至少我找不到任何至少与我的情况相似的东西。
我需要根据购买产品的日期选择汇率。 让我试着解释一下。
我有一张货币表:
CREATE TABLE `tblCurrencies` (
`CurrID` int(11) NOT NULL AUTO_INCREMENT,
`CurencySymbol` varchar(1) DEFAULT NULL,
`CurrencyCode` varchar(3) DEFAULT NULL,
`CurrencyDescription` varchar(100) DEFAULT NULL,
PRIMARY KEY (`CurrID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
汇率表:
CREATE TABLE `tblExchRates` (
`ExcID` int(11) NOT NULL AUTO_INCREMENT,
`CurrKey` int(11) DEFAULT NULL,
`Date` date DEFAULT NULL,
`Exchange` decimal(11,3) DEFAULT NULL,
PRIMARY KEY (`ExcID`),
KEY `CurrKey` (`CurrKey`),
CONSTRAINT `tblExchRates_ibfk_1` FOREIGN KEY (`CurrKey`) REFERENCES `tblCurrencies` (`CurrID`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8;
还有一个产品表(注意我的产品在表中以数字列出,在我的情况下是可以的):
CREATE TABLE `tblProducts` (
`ProductID` int(11) NOT NULL AUTO_INCREMENT,
`Contract` int(11) DEFAULT NULL,
`Product` int(11) DEFAULT NULL,
`Type` varchar(100) DEFAULT NULL,
`Currency` int(11) DEFAULT NULL,
`Amount` decimal(10,0) DEFAULT NULL,
`PurchaseDate` datetime DEFAULT NULL,
PRIMARY KEY (`ProductID`),
KEY `Contract` (`Contract`),
KEY `Currency` (`Currency`),
CONSTRAINT `tblShopCart_ibfk_2` FOREIGN KEY (`Currency`) REFERENCES `tblCurrencies` (`CurrID`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `tblShopCart_ibfk_1` FOREIGN KEY (`Contract`) REFERENCES `tblContracts` (`ContractID`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3155 DEFAULT CHARSET=utf8;
例如,在汇率表中,值设置如下:
CurrKey Date Exchange
1 15-01-2017 0.850
1 31-01-2017 0.856
1 02-02-2018 0.918
1 18-02-2018 0.905
2 04-02-2018 1.765
2 14-02-2018 1.755
等等……
我想要一个查询,根据产品的购买日期和购买的货币选择一个唯一的汇率。
换句话说,例如,如果我有一个在 2018 年 7 月 2 日购买的产品,则查询必须选择在与购买日期及其货币相匹配的相关日期范围内有效的汇率.在此示例中,2018 年 7 月 2 日购买的商品的正确兑换率是 0.918
请注意,汇率是在随机日期设置的(如上例所示)。
我设法进行了这个查询,但它并不精确,因为它有时会返回两个或更多结果(由于我设置的 10 天范围),而我只需要 1 个结果:
SELECT
tblExchRates.Exchange
FROM
tblCurrencies
INNER JOIN tblExchRates ON tblExchRates.CurrKey = tblCurrencies.CurrID
WHERE
tblCurrencies.CurrencyCode = "EUR" AND
tblExchRates.Date BETWEEN (tblProducts.PurchaseDate - INTERVAL 10 DAY) AND (tblProducts.PurchaseDate + INTERVAL 10 DAY)
【问题讨论】:
-
专业提示:欢迎初学者,但我们希望在发布问题之前在问题上花费一定的精力。尽管我们非常愿意帮助您解决您编写的代码的问题,但我们不会为您编写代码。
-
我不想让你为我写代码,我只是想要一个关于如何解决需求的提示。然后我会自己编写代码。基本上,我不知道从哪里开始 :) 我需要两个单独的查询吗?
-
预期输出是什么?