0
votes

Valeur de mise à jour dans la ligne en fonction de la valeur d'une autre ligne

J'ai une table avec des données horodatées.

SELECT lag(col1) OVER (ORDER BY t_stamp ASC) + col2 AS col3
FROM table1


1 commentaires

Veuillez fournir des échantillons de données et des résultats souhaités pour illustrer votre calcul.


4 Réponses :


0
votes

Je pense que vous voulez une somme cumulative: xxx


1 commentaires

Nan. L'équation n'a été indiquée que comme exemple d'illustrer le résultat de Col3 dépendra d'une valeur d'une autre colonne de la ligne précédente. Ce n'est pas le calcul souhaité que je veux effectuer.




0
votes

Utiliser les sous-ties .. Solvez-vous. Voici un exemple

select col2+p_col1 from
(
SELECT col1, col2, lag(col1) OVER (ORDER BY t_stamp ASC) as p_col1
FROM table1
) t


1 commentaires

J'ai déjà utilisé le décalage pour calculer les valeurs. Si vous lisez ma question plus soigneusement, vous verrez cela. La question n'est pas de savoir comment calculer les valeurs mais comment mettre à jour le tableau après la calcul des valeurs.



1
votes

Il vous suffit d'utiliser la clause depuis la clause avec la requête que vous avez déjà:

UPDATE test set col3 = prev_col1 + prev_col2
FROM (
  SELECT t_stamp,
      lag(col1) OVER (ORDER BY t_stamp ASC) prev_col1,
      lag(col2) OVER (ORDER BY t_stamp ASC) prev_col2
  FROM test) prev 
  WHERE prev.t_stamp = test.t_stamp;


2 commentaires

Merci. Cela a fonctionné comme un charme. Une question de clarification cependant. Vous avez dit dans votre réponse pour utiliser une clause "Utilisation", mais il n'y a pas d'utilisation de la clause dans votre solution. Faute de frappe?


Oui, désolé à ce sujet, j'ai réparé le texte.