Diberikan tabel dengan stempel waktu di setiap baris, bagaimana Anda akan memformat kueri agar sesuai dengan format objek json tertentu ini.
Saya mencoba mengatur objek json menjadi tahun / bulan.
json untuk mendasarkan kueri:
{
"2009":["August","July","September"],
"2010":["January", "February", "October"]
}
Inilah pertanyaan yang saya miliki sejauh ini -
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY MONTH(t.summaryDateTime) DESC";
Kueri tersebut rusak karena (dapat diprediksi) menggabungkan tahun-tahun yang berbeda.
DATE_FORMAT(t.summaryDateTime, '%Y-%m')
DATE_FORMAT( FROM_UNIXTIME(t.summaryDateTime), '%Y-%m' )
GROUP BY YEAR(date), MONTH(date) DESC;
(~ 450 ms) danGROUP BY DATE_FORMAT(date,'%Y-%m')
(~ 850 ms) pada tabel InnoDB dengan> 300.000 entri menunjukkan yang pertama (jawaban yang ditandai untuk pertanyaan ini) membutuhkan waktu ~ separuh dari yang terakhir.sumber
aku lebih memilih
SELECT MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year FROM trading_summary t GROUP BY EXTRACT(YEAR_MONTH FROM t.summaryDateTime) DESC";
sumber
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
Harus menggunakan DESC untuk YEAR dan Month untuk mendapatkan pesanan yang benar.
sumber
Saya tahu ini adalah pertanyaan lama, tetapi yang berikut harus berfungsi jika Anda tidak memerlukan nama bulan di tingkat DB:
SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month FROM trading_summary GROUP BY summary_year_month;
Lihat dokumen fungsi EXTRACT
Anda mungkin akan menganggap ini berkinerja lebih baik .. dan jika Anda membuat objek JSON di lapisan aplikasi, Anda dapat melakukan pemformatan / pengurutan saat Anda menjalankan hasil.
NB Saya tidak tahu Anda dapat menambahkan DESC ke klausa GROUP BY di MySQL, mungkin Anda kehilangan klausa ORDER BY:
SELECT EXTRACT(YEAR_MONTH FROM summaryDateTime) summary_year_month FROM trading_summary GROUP BY summary_year_month ORDER BY summary_year_month DESC;
sumber
EXTRACT(YEAR_MONTH FROM summaryDateTime)
adalah201901
Anda harus melakukan sesuatu seperti ini
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
sumber
Anda juga bisa melakukan ini
SELECT SUM(amnt) `value`,DATE_FORMAT(dtrg,'%m-%y') AS label FROM rentpay GROUP BY YEAR(dtrg) DESC, MONTH(dtrg) DESC LIMIT 12
untuk memesan berdasarkan tahun dan bulan. Katakanlah Anda ingin memesan mulai tahun ini dan bulan ini kembali ke bulan 12
sumber
Anda mengelompokkan berdasarkan bulan saja, Anda harus menambahkan YEAR () ke grup dengan
sumber
gunakan fungsi EKSTRAK seperti ini
mysql> SELECT EXTRACT(YEAR FROM '2009-07-02'); -> 2009
sumber
Inilah cara saya melakukannya:
sumber
SELECT YEAR(t.summaryDateTime) as yr, GROUP_CONCAT(MONTHNAME(t.summaryDateTime)) AS month FROM trading_summary t GROUP BY yr
Anda tetap perlu memprosesnya dalam skrip eksternal untuk mendapatkan struktur yang Anda cari.
Misalnya gunakan ledakan PHP untuk membuat array dari daftar nama bulan dan kemudian gunakan json_encode ()
sumber
Menggunakan
Dari pada
sumber