Maison > base de données > tutoriel mysql > Comment trouver les valeurs de début et de fin minimales et maximales dans des sous-ensembles consécutifs de valeurs d'acte identiques ?

Comment trouver les valeurs de début et de fin minimales et maximales dans des sous-ensembles consécutifs de valeurs d'acte identiques ?

Barbara Streisand
Libérer: 2024-12-22 12:36:14
original
252 Les gens l'ont consulté

How to Find Minimum and Maximum startt and endd Values within Consecutive Subsets of Identical act Values?

Valeurs minimales et maximales des sous-ensembles de lignes consécutives

Recherche d'une requête qui identifie et agrège les valeurs de début et de fin dans des sous-ensembles consécutifs de valeurs d'acte identiques, cette question approfondit les techniques de manipulation et d'agrégation des données.

Pour aborder ce problème, nous pouvons utiliser les éléments suivants étapes :

  1. Attribuer des numéros de ligne uniques :
    Partitionnez les données par nom et attribuez des numéros de ligne séquentiels à chaque valeur d'acte dans chaque groupe de noms. Cela nous permet de distinguer des lignes consécutives.
  2. Calculer les différences de lignes :
    Calculez la différence entre les numéros de ligne pour chaque acte (c'est-à-dire rn - act_n). Cette différence représente la position de la valeur de l'acte dans le sous-ensemble consécutif.
  3. Regrouper par positions consécutives de l'acte :
    Agrégez les données en utilisant la différence de ligne comme clé de regroupement. Cela regroupe les lignes qui appartiennent au même sous-ensemble consécutif.
  4. Trouver le minimum et le maximum :
    Dans chaque sous-ensemble groupé, calculez les valeurs minimales et maximales de startt et end. Cela fournit le résultat souhaité.

La requête suivante implémente cette approche :

with cte as (
  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 input
)
select
    name
    ,act
    ,min(startt) startt
    ,max(endd)   endd
    ,min(rn)     min_rn
    ,max(rn)     max_rn
from cte
group by 
    name
    ,act
    ,rn - act_n
order by 
    name
    ,min(rn)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal