gpt4 book ai didi

mysql - 如何存储旧数据,这是正确的方法吗?

转载 作者:行者123 更新时间:2023-11-29 16:00:01 24 4
gpt4 key购买 nike

问题:存储带有日期的 start_price。价格可以多次更改,并且还应该存储价格更改的原因。

除了制作价格变动表之外,我想不出其他方法吗?

CREATE TABLE price (
start_price decimal(4,2) NOT NULL,
price_date timestamp,
PRIMARY KEY (start_price, price_date)
);

CREATE TABLE pricechange (
start_price decimal(4,2) NOT NULL,
new_price decimal(4,2) NOT NULL,
price_date date NOT NULL,
reason varchar(100),
FOREIGN KEY (start_price, price_date)
REFERENCES price(start_price, price_date)
);

我在pricechange表中遇到错误,而且我不知道如何实际使用sql将价格从price存储到pricechange并将新价格存储为价格。

例如价格= 100。新价格= 50 原因:太贵了。应该看起来像:

价格表:当前价格:50Price_date:价格创建的时间戳

价格变化:起始价格:100新价格:50日期:价格变化的时间戳原因:太贵

最佳答案

使用包含 price effective_fromreason 列的单个表怎么样?然后,您可以使用一个 View 来显示current_prices,使用一点狡猾!

CREATE TABLE product_prices (
product_id int NOT NULL
, effective_date datetime NOT NULL DEFAULT Current_Timestamp
, price decimal(4,2) NOT NULL
, reason varchar(400) NOT NULL
, CONSTRAINT pk_product_prices PRIMARY KEY (product_id, effective_date)
, CONSTRAINT fk_product_prices_products FOREIGN KEY (product_id) REFERENCES products (product_id)
);

CREATE VIEW current_product_prices
AS
SELECT product_prices.product_id
, product_prices.price
FROM product_prices
INNER
JOIN (
SELECT product_id
, Max(effective_date) AS max_effectve_date
FROM product_prices
WHERE effective_date <= Current_Timestamp
GROUP
BY product_id
) AS current_price_date
ON current_price_date.product_id = product_prices.product_id
AND current_price_date.max_effectve_date = product_prices.effective_date
;

这是空中代码(即概念性的且未经测试的),因为我现在不可以运行 MySQL。

...但它应该具有说明性(足够)!

关于mysql - 如何存储旧数据,这是正确的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56257765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com