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
3 Réponses :
Utilisez LAG ()
select year, month, name, size, size - lag(size) over (partition by name order by year, month) as increase from MyTable
Si vous voulez 0 code> S pour le premier ensemble de lignes, utilisez le formulaire 3-argument de Lag () code>: null code> donc je préfère la réponse de JohnHC. Toutefois, la question est explicitement demander 0 code> là-bas. P> p>
Merci Johnhc et Gorden pour avoir aidé. p>
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: P>
$ 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"); p>
I Obtenir un message d'erreur: P>
AVERTISSEMENT PHP: PG_Query (): La requête a échoué: Erreur: Erreur de syntaxe au ou proche '- Galt (taille) ......' P>