2017-02-23 10 views
0

레코드가 변경 될 때마다 접두어가 붙은 새 레코드로 저장되는 데이터 수집 시스템이 있다고 가정합니다 (예 : M- [가장 최근의 번호는 que이며 고유합니다]). .반복 값을 통한 원래 값 추적 SQL

가정하자 나는 나는 다음과 같은 데이터 집합을 제공 :

Customer | Most_Recent_Val  | Pretained_To_Val |  date 
    1     M-2000     M-1050    20170225 
    1     M-1050     M-1035    20170205 
    1     M-1035     1020    20170131 
    1     1020      NULL    20170101 
    2     M-1031     1011    20170105 
    2     1011      NULL    20161231 
    3     1001      NULL    20150101 

내 원하는 출력은 다음과 같습니다 :

Customer |   Original_Val 
    1     1020 
    2     1011 
    3     1001 

내가 다음 표 주어진 각 고객에 대한 가장 최근의 값을 찾을 필요

Customer | Original_Val  | Most_Recent_Val |  date 
    1     1020     M-2000    20170225 
    2     1011     M-1031    20170105 
    3     1001     1001    20150101 

고객 1의 경우 4 단계 즉, (M-2000 < - M- 1050 < - M-1035 < - 1020) 각 고객에 대해 10 단계 이상의 깊이는 없습니다.

많이 감사! 미리 감사드립니다.

답변

0

각 고객의 최소 및 최대를 찾아 함께 결합하십시오. 다음과 같은 내용 :

Select 
    [min].Customer 
    ,[min].Most_Recent_Val as Original_Val 
    ,[max].Most_Recent_Val as Most_Recent_Val 
    ,[max].date 
From 
    (
     Select 
      Customer 
      ,Most_Recent_Val 
      ,date 
     From 
      table t1 
      inner join (
       Select 
        Customer 
        ,MIN(date) as MIN_Date 
       From 
        table 
       Group By 
        Customer 
      ) t2 ON t2.Customer = t1.Customer 
       and t2.MIN_Date = t1.Date 
    ) [min] 
    inner join (
     Select 
      Customer 
      ,Most_Recent_Val 
      ,date 
     From 
      table t1 
      inner join (
       Select 
        Customer 
        ,MAX(date) as MAX_Date 
       From 
        table 
       Group By 
        Customer 
      ) t2 ON t2.Customer = t1.Customer 
       and t2.MAX_Date = t1.Date 
    ) [max] ON [max].Customer = [min].Customer