2009-08-11 3 views
0

속성 PARAMETER_ID, 값 및 시간이있는 테이블이 있고 각 PARAMETER_ID의 최소값 (최소값)과 최대 값 (최대 값)이있는 시간 및 시간 가치는 최대입니다. 쿼리를 알려주시겠습니까? 고마워요SQL 중첩 쿼리

+0

어떤 데이터베이스를 사용하고 있습니까? –

답변

1

최대 게시 링크에서 맨 커우스의 답변까지 스크롤하여 최고입니다. 물론 이것은 사용중인 SQL의 언어가 ROW_NUMBER()와 RANK()를 지원한다고 가정합니다.

구체적인 질문에 대해서는 this question과 매우 유사합니다. 샘플 데이터가있는 CREATE TABLE 또는 INSERT 문을 제공하지 않았다면 테스트되지 않은 솔루션입니다. 나는 각 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

예. 나는 대답을 고쳤다. 감사 –