Message posté par : T. Rossini
----------------------------------------
Bonjour,
si vous avez des valeurs nulles pour evolution_population, c'est qu'une de vos
outer join ne renvoient pas de lignes.
Je pense que c'est votre condition qui coince :
* Déjà il faut s'assurer que vos recenscements sont "continus" (il n'y
pas de trou dans les années de recensenement)
* Ensuite votre condition doit satisfaire l'equation annee = (max(annee) - max(annee)
-1), mettons que annee = 2000, max(annee) = 1999 et
max(annee) -1 = 1998,
ca donne 2000 = 1999 -1998 -> 2000 = 1 . Je doute que cela soit ce que vous
cherchez.
* Enfin vos sous-requêtes pour selectionner max(annee) et max(annee) - 1 ne prenne pas en
compte le code_insee, ce qui peut vous donner de faux résultats
Ci-dessous une ebauche d'une autre façon de resoudre le problème, à base window
functions :
-----------------
Code :
SELECT
*
(
SELECT
r.code_insee,
first_value(annee) over (w) annee,
first_value(population) over (w) pop,
lead(population, 1) over (w) pop_moins_1,
lead(annee, 1) over (w) annee_moins_1,
lead(population, 2) over (w) pop_moins_2,
lead(annee, 2) over (w) annee_moins_2
FROM
recensement_population r
WINDOW w as
(PARTITION BY code_insee ORDER BY annee DESC)
) as win
NATURAL JOIN (
SELECT
code_insee,
most(annee) annee,
FROM
recensement_population
GROUP BY
code_insee
) as max
-----------------
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=361298#p361298
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net