2009-08-11 8 views
0

J'ai une table avec les attributs PARAMETER_ID, Valeur et Temps et je veux avoir chaque PARAMETER_ID avec son min (Valeur) et le Temps où la Valeur est minimum et sa max (Valeur) et le Temps quand le La valeur est maximale, pourriez-vous s'il vous plaît me dire la requête? merci beaucoupRequête SQL imbriquée

+0

Quelle base de données utilisez-vous? –

Répondre

1

Sur le lien Max posté, faites défiler jusqu'à la réponse de Mancaus, qui est le meilleur. Bien sûr, cela suppose que le langage SQL que vous utilisez supporte ROW_NUMBER() et RANK().

En ce qui concerne votre question spécifique, il est très similaire à this question. Voici une solution (non testée, étant donné que vous n'avez fourni aucune instruction CREATE TABLE ou INSERT avec des exemples de données). J'ai omis le pivot final pour obtenir les valeurs min/max et les temps dans la même ligne pour chaque PARAMETER_ID. En outre, si la valeur max ou min est deux fois à des heures différentes pour un PARAMETER_ID donné, cela vous donnera l'occurrence la plus récente.

with TRanked(PARAMETER_ID,Value,Time,upRank,downRank) as (
    select PARAMETER_ID,Value,Time, 
    row_number() over (
     partition by PARAMETER_ID 
     order by Value, Time desc 
    ),  
    row_number() over (
     partition by PARAMETER_ID 
     order by Value desc, Time desc 
    ) 
    from T 
), T_extremes(PARAMETER_ID,tag,Value,Time) as (
    select 
    PARAMETER_ID, 'min', Value, Time from TRanked where upRank = 1 
    union all 
    PARAMETER_ID, 'max', Value, Time from TRanked where downRank = 1 
) 
    select * from T_extremes; 

Les notes que j'ai faites dans l'autre thread s'appliquent ici aussi.

+0

L'un d'eux devrait être «max», non? – RBarryYoung

+0

Yup. J'ai corrigé la réponse. Merci –