2017-11-24 1 views
1

Ich habe verschiedene Empfehlungen aus anderen Pfosten ohne Erfolg versucht.MySQL Abfrage-Gruppe nach Datum

Ich habe ein Datenbank-Schema von Datensatz mit einem Created_Date Key und Wert wäre 01/01/2017

Ich versuche, die Datensätze der Datenbank abfragen, um einen zurück zählen, wie viele Datensätze pro Monat zu geben und dem Monat derjenigediejenigedasjenige Rückgang Linie mit.

Mit folgendem

SELECT SQL_NO_CACHE MONTH(`Created_Date`), COUNT(*) 
FROM `CRM_Leads` 
GROUP BY MONTH(`Created_Date`) 

Ich kehre

MONTH(`Created_Date`) COUNT(*)  
      NULL   872 

Ich habe auch versucht, fast alle Variationen des folgenden Beitrag

Count records for every month in a year

Jede Hilfe würde geschätzt.

+0

Sind deine Daten wirklich Daten, oder sind sie Zeichenfolgen? – Uueerdo

+0

Theyre Saiten. @Uueerdo – Kray

+0

Sie müssen sie in Datumswerte konvertieren, bevor Sie sie mit der MONTH-Funktion verwenden; MySQL stellt [STR_TO_DATE()] (https: //dev.mysql.com/doc/refman/5.7/de/date-and-time-funktionen.html # function_str-to-date) dafür; Ich würde die langfristige Lösung empfehlen, wenn möglich, die Spalte in ein korrektes Datum zu konvertieren. – Uueerdo

Antwort

3

vorausgesetzt, Ihr created_date ist ein String von Format ('dd-mm-yyyy') die Sie als Datum mit str_to_date umwandeln sollte

SELECT SQL_NO_CACHE MONTH(str_to_date(`Created_Date`, '%d/%m/%Y')), COUNT(*) 
FROM `CRM_Leads` 
GROUP BY MONTH(str_to_date(`Created_Date`, '%d/%m/%Y')) 
+0

kehrt 'MONAT (str_to_date (' Created_Date', '% Y-% m-% d')) \t COUNT (*) \t NULL \t 872' – Kray

+0

Ihre realen Typ und Format für die created_date Spalte zeigen .. – scaisEdge

+0

Ja, wenn Termine sind nicht im Format jjjj-mm-did –

0

Solange Sie speichern Datum/Uhrzeit als Strings, Sie wird große Schwierigkeiten haben, irgendwelche Datum/Zeit spezifische Funktionen und Funktionen zu verwenden. Wenn Sie NULL von MONTH(str_to_date( Created_Date , '%d/%m/%Y')) erhalten, konvertiert die str_to_date die Zeichenfolgen nicht zu Daten und der wahrscheinlichste Grund dafür ist die d m y "Muster" ist nicht korrekt.

Alles, was Sie alt haben uns über Ihre „Strings, die Daten sein könnte“, ist, dass einer von ihnen wie folgt aussieht: 01/01/2017. Nun, das könnte DD/MM/YYYY oder MM/DD/YYYY sein und wir können einfach nicht sagen, welches ist korrekt von dem einzelnen Wert, den Sie gewählt haben, um mit uns zu teilen. Suchen Sie nach einem beliebigen Tag Wert größer als 12 in Ihren Daten, z. 17/01/2017 ==> DD/MM/YYYYoder01/17/2017 ==> MM/DD/YYYY

Sobald Sie die Wahl Ihrer welches Muster gemacht haben „Strings, die sein könnte dates“ folgen; Wenden Sie dieses Muster in der Funktion str_to_date() an. Sie migh ein paar verschiedene Muster ausprobieren wollen das beste zu bekommen (und das sind nur drei von vielen könnten Sie versuchen):

# which pattern is best for you? 
SELECT Created_Date 
    , str_to_date(`Created_Date`, '%d/%m/%Y') "d/m/y" 
    , str_to_date(`Created_Date`, '%m/%d/%Y') "m/d/y" 
    , str_to_date(`Created_Date`, '%Y-%m-%d') "y-m-d" 
FROM `CRM_Leads` 

Sie werden nicht durch Abfrage mit Ihrer Gruppe Erfolg haben, bis Sie die am besten geeignete auswählen d m y Muster, das in der str_to_date-Funktion angewendet werden soll. Beachten Sie, dass Sie möglicherweise auch eine Vielzahl von Mustern in Ihren Daten haben. In diesem Fall müssen Sie ein noch größeres Problem lösen.

Sobald Sie die Wahl getroffen haben, welches Muster Ihre "Strings, die Daten sein könnten" folgen; Wenden Sie dieses Muster in der s tr_to_date() Funktion an und NUR DANN funktioniert Ihre Gruppe per Abfrage.