0
votes

PostgreSQL Calculer la différence entre les lignes multiples

J'ai essayé de calculer la différence entre les lignes dans un champ à l'aide d'une requête:

Illustrations: entrée: année, mois, nom, taille Sortie: Augmentation p>

 year | month  | name    | Size  | increase
------+--------+------- -+-------+-----------
 2020 | 01     |  john   |10     | 0
 2020 | 01     |  peter  |12     | 0
 2020 | 01     |  kim    |16     | 0

 2020 | 02     |  john   |15     | 5  <- 15 - 10
 2020 | 02     |  peter  |16     | 4  <- 16 - 12
 2020 | 02     |  kim    |17     | 1  <- 17 - 16

 2020 | 03     |  john   |18     | 3  <- 18 - 16
 2020 | 03     |  peter  |19     | 3  <- 19 - 16
 2020 | 03     |  kim    |77     | 60 <- 77 - 17


         -------
 2020 | 12     |  john   |25     | 17
 2020 | 12     |  peter  |70     | 33
 2020 | 12     |  kim    |90     |42


0 commentaires

3 Réponses :


3
votes

Utilisez LAG ()

select year, 
  month, 
  name, 
  size, 
  size - lag(size) over (partition by name order by year, month) as increase
from MyTable


0 commentaires

0
votes

Si vous voulez 0 S pour le premier ensemble de lignes, utilisez le formulaire 3-argument de Lag () : xxx < P> Personnellement, je préfère null donc je préfère la réponse de JohnHC. Toutefois, la question est explicitement demander 0 là-bas.


0 commentaires

0
votes

Merci Johnhc et Gorden pour avoir aidé.

Cela fonctionne lorsque j'exécute la requête sur la ligne de commande PSQL. Mais quand je l'ai mis dans un script PHP:

$ résultat = pg_query ($ Conn, "Sélectionnez l'année, le mois, le nom, (taille - Taille, 1, taille)) sur (Partition par nom Ordre par année, mois). Comme augmentation de TestDB");

I Obtenir un message d'erreur:

AVERTISSEMENT PHP: PG_Query (): La requête a échoué: Erreur: Erreur de syntaxe au ou proche '- Galt (taille) ......'


0 commentaires