2012-03-06 14 views
0

現在、私はレポート作成プロジェクトを行っています。私のデータウェアハウスでは、すべての日付(2011年1月1日以降の多分?)を含むディメンション表「時間」が必要で、毎日この形式のyyyy-mm-ddを自動的にインクリメントします。 私はDebianでMySQLを使用しています。あなたはDATEフィールドを追加し、このようなクエリを使用することができます時間ディメンションテーブルを自動的に設定する

+0

[MySQLを使用して日付期間を動的に作成する](0120-998-501) –

+0

MySQLで時間ディメンションテーブルを設定する:http ://www.joyofdata.de/blog/setting-up-a-time-dimension-table-in-mysql/ – Raffael

答えて

1

おかげで JT - また

INSERT INTO table(date_column, column1, column2) 
    VALUES(DATE(NOW()), 'value1', 'value2'); 

を、あなたは、この場合には日時の値が自動的に更新されます、ON UPDATE CURRENT_TIMESTAMPとTIMESTAMP列を追加することができます。

Automatic Initialization and Updating for TIMESTAMP

1

See this answer

Or This one

が提案の数があります。あなたの日付範囲が中程度(おそらく1年または2年)になり、レポートがストアドプロシージャを使用して結果を返すと仮定すると、限界を持つrownumテクニックを使って一時的なテーブルを作成するだけで、範囲内の日付。次に、必要に応じてデータに参加します。

2番目の答えでは、連合のトリックはコメントに応じてうまくいくように思われず、必要な最大範囲まで拡張できます。それは非常に面倒です!

+0

はい、実際に私が本当に必要としているのは12ヶ月以上です。私は、CURDATE()の挿入の簡単なスクリプトを使用し、crontabで実行をスケジュールすることを考えましたが、後者のことにあまり慣れていません。 –

+0

@JıhadV.Tawfiq - 日付を保存する必要はありません。 1,2,3 .... 365の値を持つ 'num'という単一のintカラムを持つ永久テーブルを作成してください。その後、SELECT DATE_ADD(NOW()、INTERVAL -1 * num DAY)AS日付はFRN NewNumberTable WHERE num <365'これをサブクエリとして使用し、レポートの残りのデータに結合します。クエリを実行するたびに、実行時に関係なく、最後の365の日付が表示されます。 – Tobsey

+0

@Tobseyなぜあなたは日付を保存しませんか?ストレージは簡単ですが、照会するのが簡単で、レポートツールはユーザーに実際の日付を提示することができます。 – Pondlife

1

このarticleは、あなたが望むものをカバーするようです。テーブルに追加する列の別の例については、this questionも参照してください。毎日テーブルを更新するのではなく、あらかじめ大量の日付を生成する必要があります。それは多くの仕事と複雑さを節約します。 100年はわずか36500行で、小さなテーブルです。

レポート・ツールでディメンション表にアクセスできるようにするため、一時表またはプロシージャ・コードはデータ・ウェアハウスにとっては適していません。また、RDBMSにスタースキーマのクエリが最適化されている場合(MySQLがサポートしているかどうかわかりません)、ディメンションも参照する必要があります。

関連する問題