Anda dapat menggunakan keduanya YEAR(timestamp)
dan WEEK(timestamp)
, dan gunakan kedua ekspresi ini di SELECT
dan GROUP BY
klausa.
Tidak terlalu elegan, tapi fungsional...
Dan tentu saja Anda juga dapat menggabungkan dua bagian tanggal ini dalam satu ekspresi, misalnya seperti
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Sunting :Seperti yang Martin ditunjukkan
Anda juga dapat menggunakan YEARWEEK(mysqldatefield)
fungsi, meskipun outputnya tidak ramah mata seperti formula yang lebih panjang di atas.
Edit 2 [3 1/2 tahun kemudian!]:YEARWEEK(mysqldatefield)
dengan argumen kedua opsional (mode
) disetel ke 0 atau 2 mungkin merupakan cara terbaik untuk mengagregasi dengan lengkap minggu (yaitu termasuk untuk minggu yang mengangkangi 1 Januari), jika itu yang diinginkan. YEAR() / WEEK()
pendekatan yang awalnya diusulkan dalam jawaban ini memiliki efek memecah data agregat untuk "mengangkang" tersebut minggu dalam dua:satu dengan tahun sebelumnya, satu dengan tahun baru.
Pemotongan bersih setiap tahun, dengan biaya memiliki hingga dua minggu parsial, satu di kedua ujungnya, sering diinginkan dalam akuntansi dll. dan untuk itu YEAR() / WEEK()
pendekatan lebih baik.