動的な列数のレコードセットを返すメソッドを見つけようとしています。 I Iのような必要なカラム名のリストを生成します1つのクエリ書くことができます。これは「突く」などの短いリストを返します動的な列数のPostgreSQLクエリ
SELECT DISTINCT name FROM tests WHERE group = 'basic';
を、「PRODは」、「ヒット」、「ドロップ」など次に、それぞれのテストが実行された一連のテストを示す表を作成します。毎朝、開発者が何をしているかを突き止めて調べるので、毎日テストが実行されます。このクエリは静的に書くことができます。
SELECT (SELECT success FROM test_results AS i
WHERE i.name = 'poke'
AND i.date = o.date) AS 'poke',
(SELECT success FROM test_results AS i
WHERE i.name = 'prod'
AND i.date = o.date) AS 'prod',
...
FROM test_results AS o GROUP BY date
HAVING date > now() - '1 week'::interval;
ただし、これは私たちが毎日実行しているテストにハードコードされています。毎日デバイスを起動する必要がある場合は、クエリを更新する必要があります。落下テストがもう必要なくなったと判断した場合、1週間後に落下テストの列が結果に表示されなくなります。特定の日付のみが結果エントリを持つ場合、テストが見つからない場合にNULLを返すことは完全に受け入れられます。
クエリで正規のSQLを使用するだけで、結果から列の動的リストを作成する方法はありますか?
WITH
クエリを使用して必要なデータを構築しようとしましたが、動的情報から最終行を正しく構築する方法が見つかりません。
編集:ここでは、最後の2日間からいくつかのサンプルデータです:
CREATE TABLE test_results (
name TEXT NOT NULL,
date DATE default now() NOT NULL,
success BOOLEAN NOT NULL
);
INSERT INTO test_results (name, date, success) VALUES ('hit', '2017-06-20', TRUE);
INSERT INTO test_results (name, date, success) VALUES ('poke', '2017-06-20', TRUE);
INSERT INTO test_results (name, date, success) VALUES ('prod', '2017-06-20', TRUE);
INSERT INTO test_results (name, date, success) VALUES ('poke', '2017-06-21', TRUE);
INSERT INTO test_results (name, date, success) VALUES ('prod', '2017-06-21', TRUE);
INSERT INTO test_results (name, date, success) VALUES ('poke', '2017-06-22', TRUE);
INSERT INTO test_results (name, date, success) VALUES ('prod', '2017-06-22', FALSE);
INSERT INTO test_results (name, date, success) VALUES ('poke', '2017-06-23', TRUE);
INSERT INTO test_results (name, date, success) VALUES ('prod', '2017-06-23', TRUE);
INSERT INTO test_results (name, date, success) VALUES ('drop', '2017-06-23', TRUE);
私は2017年6月23日に2017年6月21日のデータ範囲に対する私のクエリを実行すると、私は思いますその時に実行されたすべてのテストのマトリックスを含む、以下のような結果を取得したい:
date | poke | prod | drop
------------+--------+--------+-----
2017-06-21 | TRUE | TRUE | NULL
2017-06-22 | TRUE | FALSE | NULL
2017-06-23 | TRUE | TRUE | TRUE
名が突く、PRODを、ドロップはすべての名前は、その期間の間、行の名前フィールドで発見されました。その日付のレコードを持たないテストの詳細クエリではNULLが返されます。
編集ご質問や、サンプルデータと望ましい結果を提供します。 –
プロシージャ内でステートメントを動的に構築し、それを実行する必要があります。私は過去にそのようなことをやったことがありますが、私はドライブでそれを調べる必要があります。誰もあなたに正しい答えを与えないなら、私は明日それを見るでしょう。 –