2009-08-11 3 views
0

У меня есть таблица с атрибутами PARAMETER_ID, Value и Time, и я хочу иметь каждый PARAMETER_ID с его min (Value) и Time, когда значение минимально и его max (Value) и Time, когда Значение максимально, не могли бы вы рассказать мне запрос? спасибо alotSQL-вложенный запрос

+0

Какую базу данных вы используете? –

ответ

1

По ссылке Макс отправлен, прокрутите вниз до ответа Манкауса, который является лучшим. Конечно, это предполагает, что диалект SQL, который вы используете, поддерживает ROW_NUMBER() и RANK().

Что касается вашего конкретного вопроса, он очень похож на this question. Вот решение (непроверено, учитывая, что вы не представили никаких инструкций CREATE TABLE или INSERT с образцовыми данными). Я оставил окончательный стержень, чтобы получить значения min/max и времена в одну строку для каждого PARAMETER_ID. Кроме того, если максимальное или минимальное значение происходит дважды в разное время для данного параметра PARAMETER_ID, это даст вам самое последнее событие.

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; 

Примечания, которые я сделал в другой теме, также применимы здесь.

+0

Один из них должен быть «макс», верно? – RBarryYoung

+0

Yup. Я исправил ответ. благодаря –

Смежные вопросы