【发布时间】:2021-12-29 00:01:18
【问题描述】:
我想弄清楚如何确定产品的最新价格。我正在苦苦挣扎,因为价格没有更新,而且日期没有达到正确的数字。 这是我尝试编写的代码(我知道这不是最好的):
SELECT p.prodID, pr.price, MAX(pr.[from]) [date]
FROM Price pr
INNER JOIN Product p ON p.prodId = pr.prodId
GROUP BY p.prodID, pr.price;
由于这个问题,我有一个显示多个不同日期价格的数据库,但我正在尝试查找最近的数据,例如数据:
INSERT INTO Price VALUES
(36, '20191221', 16.47)
INSERT INTO Price VALUES
(36, '20191226', 16.47)
INSERT INTO Price VALUES
(36, '20191229', 12.81)
INSERT INTO Price VALUES
(36, '20191230', 12.81)
这也是价格表:
Create Table Price (
prodId int Foreign Key References Product(prodId),
[from] date,
price decimal(10,2),
Constraint PK_Price Primary Key (prodId, [from])
);
为简单起见,我只关注产品 36,但有许多不同的产品。当前结果显示价格为 18.30,日期为 2019-10-12 我希望结果显示价格为 12.81,日期为 2019-12-30。
【问题讨论】:
-
您提供的示例数据无法产生您声称的输出,因为这些值不存在于数据中。样本数据中没有
18.30或2019-10-12。你也应该解决这个问题,并显示你得到的实际输出。 -
啊好吧!这是因为实际数据有很多很多行代码,我会改变它来显示它
-
这能回答你的问题吗? Get top 1 row of each group
-
我建议你对这个目标有不同的看法。通常,活跃的 OLTP 系统需要经常知道“当前”价格。通常所有的旧价格除了不经常的管理或历史报告之外没有任何用处。在这种情况下,故意重复可能会有所帮助 - 将当前价格与您当前的 表分开存储。
标签: sql sql-server database date