2017-02-23 3 views
0

Angenommen, ein Datensammelsystem gibt, die, wann immer ein Datensatz geändert wird, dann als neuer Datensatz mit einem Präfix gespeichert wird (zB M- [letzte Zahl in que und ist einzigartig]) .ursprünglichen Wert durch Iteration SQL Tracing

Angenommen, ich bin der folgende Datensatz gegeben:

Customer |   Original_Val 
    1     1020 
    2     1011 
    3     1001 

Ich brauche den aktuellsten Wert für jeden Kunden angesichts der folgenden Tabelle zu finden:

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 

Meine gewünschte Ausgabe wäre:

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

Für Kunde 1 gibt es 4 Ebenen, dh (M-2000 < - M- 1050 < - M-1035 < - 1020) Beachten Sie, dass es für jeden Kunden nicht mehr als 10 Tiefenstufen geben würde.

Viel geschätzt! Danke im Voraus.

Antwort

0

Suchen Sie nach den Mindest- und Höchstwerten für jeden Kunden und fügen Sie ihn dann zusammen. Etwas wie dieses:

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