2017-10-15 1 views
-2

Ich verstehe, dass bei Verwendung von CASE der erste Wert ausgewählt wird, den es erfüllen kann. Allerdings möchte ich zuerst einen bestimmten Wert erhalten, wenn es ein Duplikat gibt, und wenn nicht, dann wähle den anderen.Ermitteln der gewünschten Zeile mit CASE beim Auftreten von Duplikaten

Zum Beispiel, wenn meine Tabelle wie folgt aussieht:

date  email  ordered 
1/1/17 email_1  N 
3/1/17 email_1  Y 
1/1/17 email_2  Y 
1/1/17 email_3  N 

und was ich will, ist dies:

date  email  ordered 
3/1/17 email_1  Y 
1/1/17 email_2  Y 
1/1/17 email_3  N 

Meine aktuelle Abfrage so etwas wie die unten aussieht, aber es funktioniert nicht als CASE gibt mir 'N' für email_1 aufgrund der Suche zuerst.

CASE WHEN bestellt = 'Y' THEN ELSE END 'N' bestellt

Kann mir jemand helfen dieses Problem lösen?

Antwort

0

Um die gewünschten Ergebnisse zu erhalten, können Sie die Aggregation mit der String-Funktion verwenden, um einen einzelnen Wert aus der aggregierten Ergebnismenge auszuwählen.

select 
substring_index(group_concat(`date` order by ordered desc),',',1) `date`, 
email, 
substring_index(group_concat(`ordered` order by ordered desc),',',1) `ordered` 
from demo 
group by email 

Von Ihrem Beitrag Ich gehe davon aus Sie bestellt = ‚Y‘ wird gegeben einzelnen Datensatz für jede E-Mail und Priorität auswählen möchten.

DEMO

Verwandte Themen