2017-04-05 2 views
0

Hier ist die Tabelle Ich habeArtikel vor dem Zeitpunkt der Bestellung eines bestimmten Artikels bestellt

|Customer|Order Nr.| Items | date of order | 
| 1 | 1 | Item1 | date 1  | 
| 1 | 1 | Item2 | date 1  | 
| 1 | 2 | Item1 | date 2  | 
| 1 | 2 | Item3 | date 2  | 
| 1 | 3 | Item6 | date 9  | --> Item 6, date 9 is reference date 
| 1 | 6 | Item5 | date 14  | 
| 1 | 7 | Item6 | date 18  | --> Item 6 again, date 18 is not relevant 
| 2 | 1 | Item3 | date 4  | 
| 2 | 1 | Item5 | date 4  | 
| 2 | 2 | Item9 | date 3  | 
| 2 | 2 | Item6 | date 3  | --> date 3 is reference date 
| 2 | 3 | Item6 | date 4  | --> Item 6 again, date 4 is not relevant 

Ich brauche alle vor dem Stichtag die Aufträge und Produkte des Kunden zu erhalten. Referenzdatum ist das Datum, an dem Item6 von diesem Kunden für die erste Zeit bestellt wurde. Die Liste der Kunden in dieser Tabelle sind diejenigen, die Item6 bestellt haben.

Die Tabelle muss wie folgt aussehen:

|Customer| Items | 
| 1 | Item1 | 
| 1 | Item2 | 
| 1 | Item3 | 
| 2 | Item3 | 
| 2 | Item5 | 
| 2 | Item9 | 

resutlting Tabelle nicht die Item6 Informationen haben sollte!

Jeder Vorschlag würde sehr geschätzt werden!

Antwort

1

Für einen Kunden X, sieht diese Abfrage das Bezugsdatum bis:

SELECT min(DateOfOrder) 
FROM MyTable 
WHERE Customer = X 
    AND Items = 'Item6'; 

Jetzt können Sie diese in einer korrelierten Unterabfrage verwenden, um die Zeilen zu filtern:

SELECT Customer, 
     Items 
FROM MyTable AS T1 
WHERE DateOfOrder < (SELECT min(T2.DateOfOrder) 
        FROM MyTable AS T2 
        WHERE T2.Customer = T1.Customer 
         AND T2.Items = 'Item6'); 
+0

Danke CL! Ich habe die Logik! – Sai

1

Dies wird zurückkehren das Mindestdatum Item6 Kauf für jeden Kunden

select Customer, min(DateOfOrder) 
from yourTable 
where Items = 'Item6' 
group by Customer 

Dann können Sie es mit der ursprünglichen Tabelle verbinden

select Customer, Items 
from yourTable t1 
join (
      select Customer, min(DateOfOrder) minDate 
      from yourTable 
      where Items = 'Item6' 
      group by Customer 
     ) t2 
on  t1.Customer = t2.Customer 
where t1.DateOfOrder < t2.minDate 
+0

Danke Stefano! Es ist sehr ordentlich! – Sai

Verwandte Themen