2016-05-13 17 views
0

Ich arbeite mit einem Report Writer (DataInsights). In diesem speziellen Bericht haben einige Kunden einen "Sonderpreis" und einige nicht. Für diejenigen, die dies tun, gibt es ein Ablaufdatum. Derzeit gibt der Bericht mehrere Zeilen pro Client mit einem Sonderpreis aus, da für jeden Sonderpreis eine eigene Zeile generiert wird. Wir hätten gerne eine einfache SQL-Anweisung, die alle Datensätze verwaltet, die keinen "Sonderpreis" haben, und gibt nur eine Zeile für den letzten "Sonderpreis" "Ablaufdatum" zurück, wenn sie innerhalb der letzten 3 Monate liegt. (Wenn es keine Möglichkeit, es zu den letzten 3 Monaten zu begrenzen, dann ist das in Ordnung, wir müssen nur die letzte Zeile)Der neueste Datensatz innerhalb von 3 Monaten, wenn einer existiert

Beispiel:

(Strom)

Name  Client #  Rate  Exp. Date 
John Doe  12345  Special  01/12/2014 
John Doe  12345  Special  01/12/2015 
John Doe  12345  Special  01/12/2016 
Jane White  78965 
Dixie Brown  45879  Exceptional 07/30/2011 
Dixie Brown  45879  Exceptional 07/30/2012 
Dixie Brown  45879  Exceptional 07/30/2013 

(soll

)
John Doe  12345  Special  01/12/2016 
Jane White  78965 
Dixie Brown  45879 
+0

welche Art von SQL, PL SQL? – codeMonger123

+0

Es würde helfen, Tabellenstrukturen zu sehen, Beispieldaten, erwartete Ausgabe, was Sie versucht haben und warum es nicht funktioniert hat (falsche Daten, Fehlermeldung, etc.). Bitte lesen Sie: http://stackoverflow.com/help/how-to-ask –

Antwort

1

Versuchen Sie folgendes:

select Name, Client, Rate, Date as Special_Date 
from yourtable 
    INNER JOIN 
     (
      select max(Date) Date , Name, Client 
      from yourtable 
      group by Name, Client 
     ) thedatetable 
0

Wenn Ihr Name, Ihr Client und Ihre Rate in jeder Gruppe immer dieselben sind wie in Ihren Beispieldaten, können Sie sie einfach gruppieren, indem Sie das Maximum (expdt) zurückgeben. Um alle Datensätze zu erhalten, bei denen es keine spezielle Rate gibt, und solche, die auf 3 Monate beschränkt sind, fügen Sie sie als Filter hinzu (mit ODER). Verwendet SQL Server-Syntax unten und bearbeitet ein bisschen einige Daten innerhalb von 3 Monatsfrist fallen:

WITH testdata(Name, Client, Rate, expdt) 
AS(  select 'John Doe', 12345, 'Special', '01/12/2016' 
union all select 'John Doe', 12345, 'Special', ' 03/13/2016' 
union all select 'John Doe', 12345, 'Special', '03/12/2016' 
union all select 'Jane White', 78965, NULL,   NULL 
union all select 'Dixie Brown', 45879, 'Exceptional', '07/30/2016' 
union all select 'Dixie Brown', 45879, 'Exceptional', '07/30/2016' 
union all select 'Dixie Brown', 45879, 'Exceptional', '07/30/2016' 
) 

select Name, client, Rate, max(expdt) expdt from testdata 
where Rate is NULL 
    or expdt>=DATEADD(month, -3, GETDATE()) 
group by Name, client, Rate 

OUTPUT:

Name  client Rate  expdt   
----------- ------ ----------- ---------- 
Dixie Brown 45879 Exceptional 07/30/2016 
Jane White 78965 null  null  
John Doe 12345 Special  03/12/2016 
Verwandte Themen