2017-06-19 2 views
0

Ich habe eine Frage, die ist: Erfassen des letzten Datums aus einer Reihe von bestimmten Zeilen in MySQL.Datum einer Auswahl von Zeilen in MySQL

Zum Beispiel: Angenommen, ich habe eine Einkaufstabelle mit ID, Kundennummer und Kaufdatum.

enter image description here

Wenn ich eine Auswahl basierend auf dem Client-ID machen = 1, muss ich den Kauf für die ID erfassen = 2.

+0

Update Sie hinterfragen, und fügen Sie das erwartete Ergebnis .... als Daten keine Worte – scaisEdge

+0

SELECT Id, 'Client id', MAX (' Tag der purchase') FROM Tabelle, wo 'Client id' = 1 GROUP BY 'Client-ID'; – JYoThI

Antwort

0

Ist das, was Sie nach?

SELECT Id, `client id`, MAX(`date of purchase`) 
FROM your_db 
GROUP BY `client id` 

Auch wenn Sie nur 1 Zeile zurückzukehren dann

SELECT Id, `client id`, MAX(`date of purchase`) 
FROM your_db 
WHERE `client id` = 1 
+1

Die ID-Spalte ist kein Aggregat. Diese Abfrage würde nicht auf anderen Datenbanken oder sogar auf MySQL im strikten Modus ausgeführt werden. –

+0

Also so. Eigentlich wollte ich die Client-ID per Prozedur auswählen können. Das heißt, meine "GROUP BY client_id" wäre "wo client_id = id". Aber das hat mir sehr geholfen mit der Antwort !!! Tank Sie –

+0

@TimBiegeleisen das ist richtig für dieses Beispiel ID muss nicht wirklich da drin sein, außer es kann ein Ref sein. Für Strict Mysql Tims Antwort wird besser funktionieren. Für verschiedene Datenbanken ist das eine Frage, die von der DB abhängt, da es viele Möglichkeiten gibt, eine Katze zu skinieren – Tik

0
SELECT id, client_id, DATE_OF_PURCHASE 
FROM purchasing 
GROUP BY DATE_OF_PURCHASE 
HAVING MAX(DATE_OF_PURCHASE) 

Try code above.

Hoffe, das wird helfen.

0

Wenn Sie die gesamte Zeile möchten, können Sie dies auf verschiedene Weise tun, aber denken „Filterung“ und nicht als „Aggregation“:

select t.* 
from t 
where (client_id, date_of_purchase) in (select client_id, max(date_of_purchase) 
             from t 
             group by client_id 
             ); 

Natürlich gibt es viele Möglichkeiten, ähnliche Logik auszudrücken. . . Verwenden von = mit einer korrelierten Unterabfrage exists oder join mit einer Aggregationsabfrage.

1

Eine Möglichkeit besteht darin, zu einer Unterabfrage zu gelangen, die die neuesten Kaufdaten für jeden Client findet.

SELECT t1.* 
FROM yourTable t1 
INNER JOIN 
(
    SELECT client_id, MAX(purchase_date) AS max_purchase_date 
    FROM yourTable 
    GROUP BY client_id 
) t2 
    ON t1.client_id  = t2.client_id AND 
     t1.purchase_date = t2.max_purchase_date 
-- WHERE client_id = 1 
Verwandte Themen