2016-05-20 2 views
0

Ich habe ein Datenbankfeld vom Typ datetime.ORDER BY datetime abhängig vom Tag UND Zeit

Der Name dieses Feldes ist „recallDate“

Ich möchte die Ergebnisse in der folgenden Art und Weise bestellen:

  • Die Ergebnisse chronologisch in der Zeit sein muss: von neu nach alt
  • die Ergebnisse müssen nach Datum gruppiert: mit anderen Worten, führen das gleiche Datum haben gemeinsam, für jeden da
  • gruppiert y, müssen die Ergebnisse chronologisch sein nach der Stunde: frühestens nach neuesten
  • Die Ergebnisse keine Stunde mit (00.00.00) haben des Tages am Ende der Ergebnisse sein

Dies ist meine eigentliche Abfrage:

SELECT a.recallDate, a.id, a.id_company, com.name, a.recallType 
     FROM PDT_CRM.actions a 
     INNER JOIN PDT_CRM.traders as trad on trad.id=a.id_traders 
     WHERE DATE(a.recallDate) > DATE(NOW() + INTERVAL 30 DAY) 
     ORDER BY TIME(a.recallDate) , a.recallType 

es ist sehr wahrscheinlich, dass ich CASE verwenden, aber ich verstehe nicht, wie es zu benutzen.

+0

Erstes Datum, dann Zeit. – jarlh

+0

Post Ihre Eingabe und erwartete Ausgabe –

+0

Können Sie die Daten nicht behoben werden? Praktisch alles sieht Datumswerte mit einem 0-Wert als zu Beginn des Tages gehörend - also was ist besser - manuell in jeder von Ihnen geschriebenen Anfrage "korrigieren" zu müssen oder zu ändern, was auch immer die Daten schreibt, wenn sie * beabsichtigt * zu sagen "Mitternacht am Ende des Tages X" schreibt es tatsächlich "Mitternacht am Anfang des Tages X + 1"? –

Antwort

1

können Sie den folgenden Code verwenden, um einen bestimmten Auftrag zu erstellen, die mal '00 setzen werden: 00: 00' am Ende des Tages:

... 
ORDER BY date(a.rappelDate), 
     case when time(a.rappelDate) = 0 then 1 else 0 end, 
     time(a.rappelDate) 
+0

Absolut perfekt und wirklich kurz! Danke vielmals ! – MedMatrix

Verwandte Themen