mysql で価格のタイムトラベル ビューを実装する必要があります。基本価格表は次のとおりです。
CREATE TABLE product_price (
product_id INT(11) NOT NULL,
date_valid TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
price DECIMAL(15,4) NOT NULL,
PRIMARY KEY(product_id,date_valid)
);
時間の経過とともに、事前に入力した正しい有効な価格を選択するという考え方です。たぶん、コンセプトは後でより明確になる可能性があります。各 product_id について最新の価格を取得できるように、ビューを作成する必要があります。しばらくすると、必要なことを行う SELECT が見つかりました。
SELECT * FROM (
SELECT product_id,price FROM product_pric
WHERE date_valid <= CURRENT_TIMESTAMP
ORDER BY date_valid DESC
) xx GROUP BY product_id;
必要なビューを作成するには、副選択を使用できず、1 つ以上の中間ビューを作成する必要があることを理解しました。このような:
CREATE VIEW v_product_price_time AS
SELECT product_id,price FROM product_pric
WHERE date_valid <= CURRENT_TIMESTAMP
ORDER BY date_valid DESC
;
CREATE VIEW v_product_price AS
SELECT * FROM v_product_price_time GROUP BY product_id;
私が得たものは、私が書いた元のクエリと同じではありません。たとえば、テーブルに 2 つの行だけを入力します。
INSERT INTO product_price (product_id,date_valid,price ) VALUES ( 1,'2013-01-01',41.40 );
INSERT INTO product_price (product_id,date_valid,price ) VALUES ( 1,'2013-01-03',42.0 );
生のクエリは正しいデータ (1,42.0) を返しますが、ビューのクエリはそうではありません。私はいつも (1,41.40) を取得します。
私はMySQLをよく知らないので、確かに何かが欠けています。別のオープンソース RDBMS を使用して、すでに同様の作業を行っていますが、現在は MySQL v5.5 に対処する必要があり、変更する方法がありません。しかし、ドキュメントと開発者フォーラムでのいくつかの検索では、解決策にたどり着きませんでした。これを解決する方法について何か考えはありますか?ティア。