Grouper des années consécutives dans PostgreSQL 9.0
Cet article explique comment regrouper des années consécutives dans PostgreSQL 9.0 tout en obtenant des informations uniques sur l'entreprise et la profession.
Nous utiliserons une approche en plusieurs étapes pour atteindre cet objectif. Tout d'abord, nous identifions les années non consécutives à l'aide d'une sous-requête qui attribue une valeur "group_cnt" selon que l'année est la première de la séquence ou si la différence entre l'année en cours et l'année précédente est supérieure à 1.
Ensuite, nous définissons l'ID de groupe en additionnant les valeurs group_cnt pour les années triées pour chaque entreprise et profession. Cela crée des groupes consécutifs pour des années non consécutives.
Enfin, nous exploitons une autre table dérivée pour regrouper les années en fonction de l'ID de groupe. Le résultat est un tableau d’années pour chaque entreprise et profession unique, avec des années consécutives regroupées.
Exemple de requête :
<code class="language-sql">SELECT company, profession, array_agg(year) AS years FROM ( SELECT company, profession, year, SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr FROM ( SELECT company, profession, year, CASE WHEN ROW_NUMBER() OVER (PARTITION BY company, profession ORDER BY year) = 1 OR year - LAG(year,1,year) OVER (PARTITION BY company, profession ORDER BY year) > 1 THEN 1 ELSE 0 END AS group_cnt FROM qualification ) t1 ) t2 GROUP BY company, profession, group_nr ORDER BY company, profession, group_nr;</code>
Sortie :
<code> company | profession | years ---------+------------+------------------ Google | Programmer | {2000} Google | Sales | {2000,2001,2002} Google | Sales | {2004} Mozilla | Sales | {2002} (4 rows)</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!