0

すべての夜、

アプリケーションのWeb使用状況に関する一連の統計を毎日保存するテーブルを作成しようとしています(新規ユーザー数、総訪問数などの些細なこと)。現在、これらをオンザフライでクエリしていますが、今では、パフォーマンスのために(集計クエリの負荷を単一のルックアップに減らすために)、一部は履歴分析を可能にするために、それらの保存を開始するのが好きです。

私はテーブルの次の基本スキーマを考え出しました(アイデアを与えるために、これよりも多くの列があります)

create table web_stats(
    web_stat_id bigserial primary key,
    date_created timestamp not null default now(),
    user_count integer not null,
    new_user_count integer not null
);
comment on table web_stats is 'Table stores statistics on web usage';

これで、今後テーブルにデータを入力するためのクエリを作成できてうれしいです(Quartzスケジューラーを使用してクエリを毎日実行しています)

ただし、過去の日付を遡及的にテーブルに入力する最善の方法はわかりません。INSERTステートメントを使用して、アプリケーションが公開されてから(約2年前)毎日空白の行を作成してから、UPDATEを使用して入力する必要があります。空白の行?それとも、これを一挙に行うことができますか?誰かが行を作成するためのSQLを提供できますか?

私の設計の仮定に何か問題がある場合は、私に知らせてください!

4

1 に答える 1

0

これが私がやった方法です

INSERT INTO web_stats (date_created)
    SELECT DATE('2011-08-20')+x.id
    FROM generate_series(0,521) AS x(id);

ここで、2011-08-20はアプリケーションが公開された日付であり、521は現在からそれまでの日数です。

これにより、空のテーブルが作成されるため、date_createdフィールドを使用して、UPDATEステートメントを使用して他のフィールドにデータを入力できます。

おそらく最も効率的な方法ではありませんが、それは機能します

于 2013-01-23T08:45:21.830 に答える