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 ?

Comment trouver les valeurs minimales et maximales pour les lignes consécutives en fonction de valeurs d'actes spécifiques ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-05 08:44:41418parcourir

How to Find Minimum and Maximum Values for Consecutive Rows Based on Specific Act Values?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn