Angenommen, Sie haben eine Tabelle mit einem Zeitstempel in jeder Zeile. Wie würden Sie die Abfrage formatieren, damit sie in dieses bestimmte Json-Objektformat passt.
Ich versuche, ein Json-Objekt in Jahre/Monate zu organisieren.
json, um die Abfrage zu stützen:
{
"2009":["August","July","September"],
"2010":["January", "February", "October"]
}
Hier ist die Frage, die ich bis jetzt habe -
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY MONTH(t.summaryDateTime) DESC";
Die Abfrage bricht zusammen, weil sie (vorhersagbar) die verschiedenen Jahre zusammenfasst.
GROUP BY YEAR(t.summaryDateTime), MONTH(t.summaryDateTime) DESC;
ist was du willst.
GROUP BY DATE_FORMAT(summaryDateTime,'%Y-%m')
SELECT MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM trading_summary t
GROUP BY YEAR(t.summaryDateTime) DESC, MONTH(t.summaryDateTime) DESC
Sollte DESC sowohl für das JAHR als auch für den Monat verwenden, um die korrekte Reihenfolge zu erhalten.
Ich bevorzuge
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY EXTRACT(YEAR_MONTH FROM t.summaryDateTime) DESC";
Ich weiß, dass dies eine alte Frage ist, aber Folgendes sollte funktionieren, wenn Sie den Monatsnamen nicht auf DB-Ebene benötigen:
SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month
FROM trading_summary
GROUP BY summary_year_month;
Siehe EXTRACT-Funktionsdokumente
Sie werden wahrscheinlich feststellen, dass dies eine bessere Leistung bietet. Wenn Sie ein JSON-Objekt in der Anwendungsebene erstellen, können Sie die Formatierung/Reihenfolge beim Durchlaufen der Ergebnisse vornehmen.
N.B. Ich wusste nicht, dass Sie DESC zu einer GROUP BY-Klausel in MySQL hinzufügen könnten. Vielleicht fehlt Ihnen eine ORDER BY-Klausel:
SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month
FROM trading_summary
GROUP BY summary_year_month
ORDER BY summary_year_month DESC;
Sie müssen so etwas tun
SELECT onDay, id,
sum(pxLow)/count(*),sum(pxLow),count(`*`),
CONCAT(YEAR(onDay),"-",MONTH(onDay)) as sdate
FROM ... where stockParent_id =16120 group by sdate order by onDay
verwenden Sie die EXTRACT-Funktion wie folgt
mysql> SELECT EXTRACT(YEAR FROM '2009-07-02');
-> 2009
Sie gruppieren sich nur nach Monat. Sie müssen YEAR () zur Gruppe hinzufügen
Sie können das auch tun
SELECT SUM(amnt) `value`,DATE_FORMAT(dtrg,'%m-%y') AS label FROM rentpay GROUP BY YEAR(dtrg) DESC, MONTH(dtrg) DESC LIMIT 12
nach Jahr und Monat zu bestellen. Nehmen wir an, Sie möchten ab diesem Jahr und diesen Monat bis zu 12 Monate zurück bestellen
SELECT YEAR(t.summaryDateTime) as yr, GROUP_CONCAT(MONTHNAME(t.summaryDateTime)) AS month
FROM trading_summary t GROUP BY yr
Trotzdem müssten Sie es in einem externen Skript verarbeiten, um genau die Struktur zu erhalten, nach der Sie suchen.
Verwenden Sie zum Beispiel die Explosion von PHP, um ein Array aus der Liste der Monatsnamen zu erstellen, und verwenden Sie dann json_encode ().