2017-03-07 65 views
0

我想在Postgres中創建一個查詢來獲取表格的結果如下。我們的想法是創建一個表格,其中包含dateM處名稱爲variableN的變量的值。而不是使用由傳感器名稱排序的對日期值創建完整列表,輸出將採用表格格式。postgres中的交叉表

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. 避免用引號使用$something$問題對於整個查詢
  2. 格式的查詢以獲取更好可讀
  3. 使用別名表
  4. AS子句則沒有描述你的查詢結果,它必須描述結果crosstab

    SELECT * FROM交叉(

    $$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);