2012-09-04 5 views
1

특정 소프트웨어 버전의 시작일과 종료일을 알아야합니다. 표는 다음과 같은 데이터가 있습니다노드별로 버전을 기준으로 그룹화하는 방법은 무엇입니까?

Row ID Node_ID logtime       Version 
201191 121212 11-OCT-11 12.13.48.495000000 AM v2.0.26496.311  
470128 121212 08-DEC-11 10.45.04.696000000 AM v2.0.26496.312 
495049 121212 23-JAN-12 06.06.09.226000000 PM v2.0.26496.313 
630076 121212 30-APR-12 03.21.12.296000000 PM v2.1.2344.31 
643917 121212 31-MAY-12 10.59.32.655000000 AM v2.1.2514.31 

예상 출력 :

당신이 v2.0.26496.311을 볼 수 있듯이
Node_ID Version   logtime_start     logtime_end 
121212 v2.0.26496.311 11-OCT-11 12.13.48.495000000 AM 08-DEC-11 10.45.04.696000000 AM 
121212 v2.0.26496.312 08-DEC-11 10.45.04.696000000 AM 23-JAN-12 06.06.09.226000000 PM 
121212 v2.0.26496.313 23-JAN-12 06.06.09.226000000 PM 30-APR-12 03.21.12.296000000 PM 
121212 v2.1.2344.31 30-APR-12 03.21.12.296000000 PM 31-MAY-12 10.59.32.655000000 AM 
121212 v2.1.2514.31 31-MAY-12 10.59.32.655000000 AM today's date 

나에게 날짜 범위이 특정을 제공하는 1 행과 2 행에서 logtime를 사용 버전이 사용되었습니다.

사용해야 할 아이디어 나 지침이 있습니까? 다음과 같이 할 수 2008+ SQL 서버에서

답변

0

:

 -- Some test data 
     declare @V table(ID int identity, Node_ID int, logtime datetime, Version varchar(50)); 
     insert @V values(121212, '2011-OCT-11 12:13:48', 'v2.0.26496.311'); 
     insert @V values(121212, '08-DEC-11 10:45:04', 'v2.0.26496.312'); 
     insert @V values(121212, '23-JAN-12 18:06:09', 'v2.0.26496.313'); 
     insert @V values(121212, '30-APR-12 03:21:12', 'v2.1.2344.31'); 
     insert @V values(121212, '31-MAY-12 10:59:32', 'v2.1.2514.31'); 

     -- a temporary named result set, known as a common table expression 
     with CTE (ROWID, Node_ID, [Version], logtime) 
     as 
     (
      select ROW_NUMBER() OVER (Order by ID), Node_ID, Version, logtime 
      from @V 
     ) 

     select 
      a.Node_ID, 
      a.Version, 
      Start = min(a.logtime), 
      [End] = min(b.logtime) 
     from CTE a 
      left join CTE b on b.ROWID = a.ROWID + 1 
     group by a.Node_ID, a.Version 
     order by a.Node_ID, a.Version, min(a.logtime) desc 
+0

감사합니다.하지만 LEAD 함수를 사용하여 문제가 해결되었습니다. – vwbeetle

0

선택 NODE_ID을
버전, logtime_start로
logtime,
NVL (LEAD (logtime, 1) OVER (ORDER BY node_id, logtime), systimestamp)로 logtime_end 에서 audit_values;

관련 문제