J'essaie de créer une requête dans Postgres pour obtenir un résultat sous forme de tableau comme suit. L'idée est de créer une table incluant la valeur de la variable dont le nom est variableN à dateM. Au lieu de créer une liste complète avec la paire date-valeur ordonnée par nom de capteur, la sortie serait au format table.Tableau croisé dans postgres
logtime variable1 variable2 variable3
------------------------------------------------------
date1 value11 value12 value13
date2 value21 value22 value23
De cette façon, je me sers de la fonction tableau croisé, mais, pour moi, cette fonction est la première fois à utiliser et je n'ai pas connaissance à ce sujet. J'ai essayé plusieurs façons, mais personne ne travaille. Je serais très reconnaissant avec toute aide.
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);
Les tables croisées sont sensorhistdatalog et le capteur, où sensorhistdatalog a plusieurs colonnes, mais nous utilisons sensor_id (qui est la clé étrangère de l'identifiant du capteur de table), la date et la valeur, principalement. Table de capteur est essentiellement la liste des capteurs avec identifiant, nom et description.
L'erreur est:
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)
Quelque chose ne va pas avec votre fonction appeler l'erreur représente ce postgres pensent qu'il devient. Vous voudrez peut-être essayer de créer une vue ou une fonction pour donner comme argument à la place – Filip
je devinerais qu'il y a quelque chose qui ne va pas dans les statuts et qui sont lus par le serveur – Filip