2010-12-14 12 views
0

Im Moment habe ich diese Abfrage:SQL - verwechseln mit Aggregate

select 
    customers.emailaddress, 
    MAX(orders.orderdate) as "last order" 
from orders 
join customers 
    on orders.customerID = customers.customerID 
group by customers.emailaddress 

die mir die E-Mails und das letzte Bestelldatum gibt. In der Tabelle "Bestellungen" gibt es ein Feld mit dem Namen "PaymentTotal". Wie kann ich dies anhand des von MAX (orders.orderdate) zurückgegebenen Werts erhalten? (dh ich versuche, den Betrag der letzten Bestellung per E-Mail zu erhalten)

+0

wäre es nützlich zu wissen, über welchen SQL-Server Sie sprechen. PostgreSQL, Oracle, SQL Server, etc ... – Wolph

+0

Ich denke, es ist MS-SQL, verpackt mit einem shoppingcart verwenden wir das ist ASP (.net) basiert (daher meine Annahme, es ist MS) – Prinzovdarkness

Antwort

3
select c.EmailAddress, om.MaxOrderDate, o.PaymentTotal 
from (
    select CustomerID, MAX(orders.orderdate) as MaxOrderDate 
    from orders 
    group by CustomerID 
) om 
inner join orders o on om.CustomerID = o.CustomerID 
    and om.MaxOrderDate = o.orderdate 
inner join customers c on o.customerID = c.customerID  
+0

Ich hoffe, das Bestelldatum muss für jeden Kunden eindeutig sein, andernfalls werden die erwarteten Ergebnisse nicht zurückgegeben. Ich frage mich, was der Typ der Bestellungsspalte ist ... – Jay

+0

Bestelldatum ist Datetime. Danke für die Hilfe. Kann also jemand aufschlüsseln, was mit der obigen Abfrage passiert ist? Ich würde wirklich gerne lernen, so dass ich dies beim nächsten Mal selbst machen kann :) – Prinzovdarkness

+0

die Unterabfrage "om" findet die Kundennummer und das Datum, dann verbindet sie die Bestell- und Kundentabelle zurück auf diesem Wert, um den Kunden und den Gesamtbetrag abzurufen für diese Bestellung. – asawyer