0

パフォーマンス上の理由から、日ごとに合計されたデータの具体化されたビューを作成する必要があります。タイムスタンプは UNIX タイムスタンプとして保存されます。

マテリアライズド ビューのテーブルへの更新 (REPLACEing) を許可するには、1 日の開始 (または終了) に一致する UNIX タイムスタンプ形式のタイムスタンプが必要です。そのタイムスタンプは、テーブルのキーの一部になります。ベーステーブルのデータが変更されるたびに、その特定の日にのみビューのテーブルを更新できます (これもパフォーマンスのためです)。

現在の集計ステートメントは次のようになります。

REPLACE INTO aggregate_data (channel_id, type, timestamp, value)
SELECT channel_id, 'day' AS type, MAX(timestamp) AS timestamp, SUM(value) AS value
FROM data
GROUP BY channel_id, YEAR(FROM_UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000));

最後に集計されたデータのタイムスタンプではなく、MAX(timestamp) をその日の境界 (24:00) に一致させるにはどうすればよいですか?

4

2 に答える 2

0

あなたの質問を正しく理解しているかどうかわかりません。このようなものをお探しですか?

REPLACE INTO aggregate_data (channel_id, type, timestamp, value)
SELECT channel_id, 'day' AS type, 

UNIX_TIMESTAMP(DATE_FORMAT(FROM_UNIXTIME(MAX(timestamp)), '%Y-%m-%d 23:59:59'))
AS timestamp, 

SUM(value) AS value
FROM data
GROUP BY channel_id, YEAR(FROM_UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000));
于 2013-10-08T12:07:54.257 に答える