J'extrise les données de l'horaire d'une base de données, les données sont stockées par ligne, avec un champ de type aussi stocké. (c'est-à-dire que la table a des champs pour horodatamp, type de type de données, valeur).
Timestamp Offset Multi Value Output ------------------------------------------- 2019-07-22 0,7047 0,9805 6,6526 1,1223 2019-07-23 0,7005 0,9850 6,6955 1,1150 2019-07-24 0,6980 0,9855 6,6995 1,1143
3 Réponses :
Si le NON des colonnes est fixe, vous pouvez utiliser la méthode pivot de cas -
SELECT Timestamp ,MAX(CASE WHEN Type = 'Offset' THEN Value END) Offset ,MAX(CASE WHEN Type = 'Multi' THEN Value END) Multi ,MAX(CASE WHEN Type = 'Value' THEN Value END) Value ,MAX(CASE WHEN Type = 'Output' THEN Value END) Output FROM YOUR_TABLE GROUP BY Timestamp;
Vous pouvez utiliser une agrégation conditionnelle:
select * from ( select * from tab ) pivot( max(value) for Type in ( 'Offset' as "Offset", 'Multi' as "Multi", 'Value' as "Value", 'Output' as "Output" ) ) order by Timestamp;
Si votre colonne TIMESTAMP contient un composant de temps fractionné et que vous souhaitez le troncher à des secondes, ce serait comme suit:
SELECT cast (systimestamp as date) ddate ,MAX(DECODE (Type, 'Offset', Value)) Offset ,MAX(DECODE (Type, 'Multi', Value)) Multi ,MAX(DECODE (Type, 'Value', Value)) Value ,MAX(DECODE (Type, 'Output', Value)) Output FROM YOUR_TABLE GROUP BY cast (systimestamp as date);
Groupe par horodatage, utilisez des expressions de cas pour Multi etc. dans la liste Select.