駐車場の状態を表す、次の構造とデータを含むテーブルがあります。
id bayID state starttime
1 1 FREE 2013-08-09 09:13:02
2 1 OCCUPIED 2013-08-09 09:15:50
3 1 FREE 2013-08-09 09:33:15
4 1 OCCUPIED 2013-08-09 09:35:10
5 1 FREE 2013-08-09 10:03:22
ここで、ベイの平均駐車占有時間を計算する必要があります。レコードは数百万になる可能性があるため、これを行うための最適な方法を探しています。これにより、平均のクエリをすばやく実行できます。
私の考えは、上記のテーブルのデータを、駐車時間が既に計算されている別のテーブルに前処理することでした。これは、ベイの OCCUPIED エントリと FREE エントリのペアを見つけて、開始時間の時間差を計算することによって行われます。これにより、次のような構造が得られます。
bayID starttime duration
1 2013-08-09 09:15:50 ...
1 2013-08-09 09:35:10 ...
次に、2 つの日時の間でクエリを実行し、期間を平均化できます。
これが推奨されるアプローチのように思われる場合、計算されたデータセットがどのように作成されるのか疑問に思っていました。私はできると思います:
- 最初のテーブルへの挿入後に実行されるトリガーを作成し、計算を行い、必要に応じて別のテーブルに挿入します。
- 最初のテーブルにビューを作成します。残念ながら、これが可能かどうかを知るのに十分な MySQL の知識がありません。
コーディングに飛び込む前に、提案されたソリューションについて誰かアドバイスをもらえますか? それらは両方とも実行可能であり、どちらか一方を使用することの (欠点) 利点は何ですか?