私のクロス集計クエリ (以下を参照) は問題なく実行されます。ただし、そのようなクエリを大量に生成する必要があり、重要なことに、列定義の数は日によって異なります。出力列定義の数がクロス集計の 2 番目の引数の数と一致しない場合、クロス集計はスローされ、エラーが発生して中止されます。したがって、現在のクエリのように列定義を「配線」することはできません。代わりに、列定義がオンザフライで同期されるようにする関数が必要です。そのようなすべてのインスタンスで再利用可能な一般的なpostgres関数を書くことは可能ですか? これが私のクエリです:
SELECT *
FROM crosstab
('SELECT
to_char(ipstimestamp, ''mon DD HH24h'') As row_name,
ips.objectid::text As category,
COUNT(*)::integer As value
FROM loggingdb_ips_boolean As log
INNER JOIN IpsObjects As ips
ON log.Varid=ips.ObjectId
WHERE (( log.varid = 37551)
OR (log.varid = 27087)
OR (log.varid = 29469)
OR (log.varid = 50876)
OR (log.varid = 45096)
OR (log.varid = 54708)
OR (log.varid = 47475)
OR (log.varid = 54606)
OR (log.varid = 25528)
OR (log.varid = 54729))
GROUP BY to_char(ipstimestamp, ''yyyy MM DD HH24h''), row_name, objectid, category
ORDER BY to_char(ipstimestamp, ''yyyy MM DD HH24h''), row_name, objectid, category',
'SELECT DISTINCT varid
FROM loggingdb_ips_boolean ORDER BY 1;'
)
As CountsPerHour(row_name text,
"25528" integer,
"27087" integer,
"29469" integer,
"37551" integer,
"45096" integer,
"54606" integer,
"54708" integer,
"54729" integer)
PS: このクエリは、次のサーバーのテスト データに対して実行できることに注意してください: ホスト: bellariastrasse.com データベース: IpsLogging ユーザー: ゲスト パスワード: ゲスト