単純化された構造が次のように見える 2 つのテーブルがあります。
RESPONSES
id
created
ACCESSORY VALUES
id
response_id
sensor_id
value
特定の応答のすべてのアクセサリ値を一定期間にわたって 1 つの行にフラット化するビューを作成したいと考えています ( でフィルタリングresponse.created
)。ピボットテーブルまたはクロス集計が必要だと思いますが、両方に慣れておらず、見つけた例は主に既知の数の列を扱っています。さらに複雑なことに、特定のセンサーは、ユーザーが問題の時間中に追跡を開始または停止した場合、その期間の一部にしか表示されませんでした. 理想的には、センサーが存在しない場合は、センサーの列に NULL を保持します。これは可能ですか?もしそうなら、私は正しい軌道に乗っていますか、それとも間違った場所を探していますか?
個々の行としてデータを取得するSQLは次のようになります
SELECT r.id, a.sensor_id, a.value from results_response r
INNER JOIN results_accessoryvalue a ON r.id = a.response_id
WHERE r.installation_id = 40
AND r.created BETWEEN '2013-04-01' AND '2013-05-01'
ORDER BY r.created
しかし、動的列を指定する方法がわからないため、クロス集計で使用しようとしてもうまくいきません。