2017-03-07 5 views
0

다음과 같이 결과를 얻기 위해 Postgres에서 쿼리를 작성하려고합니다. 아이디어는 dateM에 variableN이라는 이름의 변수 값을 포함하는 테이블을 만드는 것입니다. 센서 이름별로 날짜 - 값 쌍이 나열된 전체 목록을 만드는 대신 출력이 표 형식이됩니다. 이런 식으로 포스트 그레스의 크로스 탭

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

, 나는 함수 크로스 탭을 사용하고 있지만, 나를 위해,이 기능을 사용하는 처음이고 나는 그것에 대해 지식이 없습니다. 여러 가지 방법으로 시도했지만 아무도 작동하지 않습니다. 나는 어떤 도움으로도 매우 감사 할 것입니다. sensorhistdatalog 여러 열이있는 경우

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

X 표시된 테이블, sensorhistdatalog 및 센서, 그러나 우리는 주로 (즉, 테이블 센서의 ID에서 외래 키) sensor_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

뭔가 오류를 호출 함수에 문제가 있습니다 포스트 그레스는 그것이 점점 생각이다. 당신은보기 또는 함수 대신에 인수로 제공하려고 할 수도 있습니다 – Filip

+0

내 추측은 거기에 뭔가 잘못되어있는 것입니다 및 통계 및 서버에서 읽을 수 있습니다 – Filip

답변

0
  1. 은 전체 쿼리
  2. 형식 인용 사용 $something$에 문제를 방지하기 위해 테이블 ​​
  3. 절 않는

  4. 에 더 읽을 수
  5. 사용 별칭에 대한 쿼리 귀하의 질의 결과를 기술하지 않으실 경우 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);