私はすべてを見てきましたが、これを処理するためのインテリジェントな方法をまだ見つけていませんが、可能であると確信しています:
履歴データの 1 つのテーブルには、四半期ごとの情報が含まれています。
CREATE TABLE Quarterly (
unique_ID INT UNSIGNED NOT NULL,
date_posted DATE NOT NULL,
datasource TINYINT UNSIGNED NOT NULL,
data FLOAT NOT NULL,
PRIMARY KEY (unique_ID));
履歴データの別のテーブル (非常に大きい) には、毎日の情報が含まれています。
CREATE TABLE Daily (
unique_ID INT UNSIGNED NOT NULL,
date_posted DATE NOT NULL,
datasource TINYINT UNSIGNED NOT NULL,
data FLOAT NOT NULL,
qtr_ID INT UNSIGNED,
PRIMARY KEY (unique_ID));
qtr_ID フィールドは、データベースに入力された日次データのフィードの一部ではありません。代わりに、Daily テーブルの qtr_ID フィールドに、Quarterly.unique_ID 行 ID をさかのぼって入力する必要があります。そのデータ ソースのその Daily.date_posted。
たとえば、四半期データが
101 2009 年 3 月 31 日 1 4.5
102 2009 年 6 月 30 日 1 4.4
103 2009 年 3 月 31 日 2 7.6
104 2009 年 6 月 30 日 2 7.7
105 2009 年 9 月 30 日 1 4.7
そして毎日のデータは
1001 2009-07-14 1 3.5 ??
1002 2009-07-15 1 3.4 &&
1003 2009-07-14 2 2.3 ^^
次に、??が必要です。qtr_ID フィールドには、その日付のそのデータ ソースの最新の四半期として '102' が割り当てられ、&& も '102' になり、^^ は '104' になります。
課題には、両方のテーブル (特に日次テーブル) が実際には非常に大きいこと、繰り返しの日付を取り除くために正規化できないこと、または別の方法で最適化することができないこと、および特定の日次エントリでは先行する四半期ごとのエントリがないことが含まれます。
datediff (課題はゼロより大きい datediff の最小値を見つけることです) を使用してさまざまな結合を試みましたが、何も機能していません - 通常、私の構文はどこかで壊れています。どんなアイデアでも大歓迎です。基本的なアイデアやコンセプトを実行し、報告します。