--- /dev/null
+#!/bin/bash
+
+# Afficher le nombre d'adhérents en fonction de leur première année d'adhésion
+# Si on appelle le script avec en paramètre une année, il fait le calcul pour les adhérents
+# encore adhérents pour l'année fournie.
+# Si on l'appelle sans paramètre, il fait le calcul pour toutes les années possibles
+# et présente le résultat dans une "matrice" triangulaire
+
+export LESS='-SR'
+
+case $1 in
+ "")
+ # Vide, on va lancer le script de calcul complet
+ ;;
+ *)
+ # Pas vide, on espère que c'est bien une année et on lance le calcul seulement dessus
+ annee=$1
+ psql note -c "
+ SELECT count(idbde), prems
+ FROM (
+ SELECT a.idbde, pseudo, nom, prenom,
+ (SELECT min(annee) FROM adhesions WHERE adhesions.idbde = c.idbde) AS prems
+ FROM comptes c, adhesions a
+ WHERE a.idbde = c.idbde AND a.annee = ${annee}
+ ) AS prout
+ GROUP BY prems
+ ORDER BY prems;"
+ exit
+ ;;
+esac
+
+echo "Creating auxiliary table fy"
+psql note -c "DROP TABLE IF EXISTS fy;
+ (SELECT idbde, min(annee) AS firstyear INTO fy FROM adhesions GROUP BY idbde);"
+
+echo "Computing year range"
+beginend=$(psql note -A -c "SELECT (SELECT min(firstyear) FROM fy), (SELECT max(firstyear) FROM fy);" | tail -n +2 | head -n 1)
+
+begin=$(echo ${beginend} | cut -d "|" -f 1)
+end=$(echo ${beginend} | cut -d "|" -f 2)
+
+# Construction de la requête
+req="
+SELECT years.annee AS prems,"
+
+for annee in $(seq ${begin} ${end})
+do
+ # On ajoute une colonne pour chaque année
+ req="${req}
+ (SELECT count(c.idbde)
+ FROM comptes c, fy
+ WHERE c.idbde = fy.idbde
+ AND fy.firstyear = years.annee
+ AND EXISTS (SELECT idbde
+ FROM adhesions a
+ WHERE a.idbde = c.idbde
+ AND a.annee = ${annee}
+ )
+ ) AS c${annee},"
+done
+
+# enlève la dernière virgule
+req=${req::-1}
+
+req="${req}
+FROM (SELECT DISTINCT annee FROM adhesions) AS years
+ORDER BY years.annee;"
+
+echo "Computing…"
+psql note -c "${req}"
+
+echo "Removing auxiliary table"
+psql note -c "DROP TABLE fy;"