Bonjour,
sur les screenshots que j'avais vu, je ne voyais que MSSQL, ORACLE et PostGIS (à priori post pour PostGres) d'où ma perplexité.
Quand je disais: "pas dans le bon Forum" je pensais qu'il valait mieux que la question soit directement posé en SQL
remplacer le
1 2 3
| SUM(T0.T0RES)
OVER(ORDER BY T0.T0NOM, T0.T0ID
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) |
par autre chose ?
Ce qui suit n'est que spéculation/base de travail , sans jeu d'essai (et résultat escompté)
on pourrait passer par une CTE (common table expression) pour le SUM
// à mettre au début du SQL
1 2
| WITH CTE1 (SELECT T0NOM,T0ID,SUM(TORES) AS SUMTORES FROM TT01
GROUP BY T0NOM,T0ID) |
mais ce sont les PRECEDING que je ne sais pas exprimer ou du moins ne comprends pas totalement
je déduit qu'il s'agit plus ou moins de "la valeur de l'enregistrement précédent" il faudrait alors introduire une notion de RANG sur cette CTE.
Quelque chose comme (à la suite de la première CTE)
1 2
| , CTE2 AS (SELECT (SELECT COUNT(*) FROM CTE1 AS b WHERE b.T0NOM<=a.T0NOM AND b.T0ID<=a.T0ID) AS RANG,
a.T0NOM AS NOM ,a.T0ID AS ID,a.SUMTORES AS STORES FROM CTE1 a) |
dans le CASE il faudrait alors récupérer
SELECT STORES FROM CTER WHERE RANG=(SELECT RANG-1 FROM CTER WHERE NOM=T0.NOM AND ID=T0.ID)
Attention tout cela est sans filet (pas de contrôle) et je ne suis pas un SQLite pro, c'est juste que je me suis trouvé confronté à un problème de fenêtrage SQlite récemment (beaucoup moins complexe) et que j'ai contourné par une CTE
[EDIT] note : je viens de faire un jeu d'essai rapide, si c'est bien "la valeur de l'enregistrement précédent", ce que je propose fonctionne
Il y a aussi, certainement, la possibilité de faire une CTE RECURSIVE pour obtenir le "rang" mais je ne voit pas vraiment bien la syntaxe à adopter
Partager