Maison >base de données >tutoriel mysql >Comment trouver les valeurs minimales et maximales pour les lignes consécutives en fonction de valeurs d'actes spécifiques ?
Identification des groupes de lignes consécutifs pour l'agrégation
Problème :
Récupérer les valeurs minimales et maximales de startt et end pour les lignes consécutives de valeurs d’acte spécifiques. Chaque nom unique définit une séquence distincte d'occurrences d'actes. L'entrée ne fournit aucune colonne supplémentaire pour l'identification des lignes.
Approche :
Pour établir l'identité des lignes au sein de chaque groupe d'actes de nom, nous utilisons les numéros de lignes :
row_number() over (partition by name, act order by rn) as act_n row_number() over (partition by name order by rn) as rn
Ces numéros de lignes nous permettent de différencier les lignes au sein d'un groupe et d'identifier des plages d'actes consécutives valeurs.
Agrégation pour Min et Max :
Pour trouver le résultat souhaité pour chaque combinaison nom-acte, nous agrégeons les données dans des groupes de lignes consécutifs. Le calcul clé est la différence entre les deux numéros de ligne :
rn - act_n diff
Cette différence représente la position au sein de chaque groupe, nous permettant de déterminer des plages consécutives.
select name, act, min(startt) startt, max(endd) endd from ( select name, act, row_number() over (partition by name order by name, startt) rn, row_number() over (partition by name, act order by name, startt) act_n, startt, endd from @t ) group by (rn - act_n), name, act order by name;
Cette requête regroupe les données par la différence de numéro de ligne, fournissant le résultat souhaité.
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!