2017-03-07 6 views
0

次のような結果を得るために、Postgresでクエリを作成しようとしています。考え方は、dateMにvariableNという名前の変数の値を含むテーブルを作成することです。センサー名で順序付けられた日付 - 値ペアを含む完全なリストを作成する代わりに、出力はテーブル形式になります。このようにしてポストグルのクロスタブ

logtime  variable1  variable2  variable3 
------------------------------------------------------ 
date1   value11  value12   value13 
date2   value21  value22   value23 

、私は私のために、この機能を使用すると、私はそれについての知識を持っていない初めてです、機能のクロス集計を使用しますが、しています。私はいくつかのやり方を試みましたが、誰も働きません。私はどんな助けでも非常に感謝しています。

select * from crosstab(
'SELECT sensorhistdatalog.valuedate as logtime, sensorhistdatalog.value as logvalue, sensor.name FROM public.sensor 
INNER JOIN public.sensorhistdatalog 
ON sensor.id = sensorhistdatalog.sensor_id 
where sensorhistdatalog.valuedate between ''2017-03-06'' and ''2017-03-07'' 
and sensor.name in (''LHTES_ON','C_VELOCIDAD_V3_MAN','C_VELOCIDAD_V4_MAN','VELOCIDAD_V3','VELOCIDAD_V4','LHTES MODE','TEMP_COMF_W','TEMP_COMF_S', 
'TO_EXT','TO_INT','TI_EXT','TI_INT','TEMP_PLATE_1','TEMP_PLATE_2','TEMP_PLATE_3','TEMP_PLATE_4','DUMPER_1','DUMPER_2','REF_V3','REF_V4'') 
order by name, valuedate asc') 
as (
logtime text, 
logvalue text, 
name text); 

交差テーブルはsensorhistdatalogとsensorhistdatalogは複数の列を有するセンサであるが、我々は、主にsensor_id(つまり、テーブルセンサのIDから外部キーである)、日付及び値を、使用します。センサーテーブルは、基本的にID、名前、および説明を持つセンサーのリストです。

エラーは次のとおりです。

ERROR: no existing function crosstab(unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown) 
+0

何かがあなたの関数と間違っているエラーを呼び出すPostgresが、それはなっていると思うものを表します。あなたは代わりに引数として与えるためにビューや関数を作成しようとするかもしれません – Filip

+0

私の推測では、何か間違っていることになるでしょう、そして、 – Filip

答えて

0
  1. 句がするように、全体のクエリ
  2. フォーマット用のテーブル
  3. のためのより良い読める

  4. 使用エイリアスのためのクエリを引用利用$something$の問題を回避するために、クエリの結果を記述していない場合、結果はcrosstab

    である必要がありますクロス集計FROM

    SELECT *は、(

    $$SELECT shdl.valuedate as logtime, 
          shdl.value as logvalue, 
          s.name 
         FROM public.sensor as s 
        INNER JOIN public.sensorhistdatalog as shdl 
          ON s.id = shdl.sensor_id 
         WHERE shdl.valuedate between '2017-03-06' and '2017-03-07' 
         AND s.name in ('LHTES_ON', 'C_VELOCIDAD_V3_MAN', 'C_VELOCIDAD_V4_MAN', 'VELOCIDAD_V3', 'VELOCIDAD_V4', 'LHTES MODE', 'TEMP_COMF_W', 'TEMP_COMF_S', 'TO_EXT', 'TO_INT', 'TI_EXT', 'TI_INT', 'TEMP_PLATE_1', 'TEMP_PLATE_2', 'TEMP_PLATE_3', 'TEMP_PLATE_4', 'DUMPER_1', 'DUMPER_2', 'REF_V3', 'REF_V4'') 
         ORDER BY name, valuedate asc 
        $$) 
        AS (logtime text, variable1 text, variable2 text, variable3 text); 
    
関連する問題