SQL Query untuk mendapatkan hari terakhir setiap minggu


8

Menggunakan MySQL, saya perlu query tabel yang memiliki bidang datetime. Saya perlu menghitung semua catatan untuk minggu tertentu. Menggunakan date_format (colname, "% Y% V") mengembalikan minggu #, tetapi saya memerlukan hari terakhir (hari bulan 01-28 | 29 | 30 | 31) untuk minggu itu.

Keluaran misalnya

    COUNT (*) | Tanggal
    11 | 2012-01-07
    22 | 2012-01-14
    123 | 2012-01-21

Tolong?

Catatan: Hari terakhir dalam seminggu dalam kasus saya adalah hari Minggu.

Jawaban:


12

Anda harus menggunakan fungsi DAYOFWEEK

Jika Akhir Minggu di hari Sabtu, tanggal apa pun dapat diubah menjadi hari Sabtu.

Misalnya, ini menghitung hari Sabtu yang akan datang

SELECT DATE(NOW() + INTERVAL (7 - DAYOFWEEK(NOW())) DAY);

Ini menghitung hari Minggu yang akan datang (Anda harus menggunakan fungsi WEEKDAY sebagai gantinya)

SELECT DATE(NOW() + INTERVAL (6 - WEEKDAY(NOW())) DAY); 

Untuk tabel yang disebut mytable dengan Kolom Tanggal yang disebut tanggal, penjumlahan Anda akan menjadi

Sabtu

SELECT COUNT(1) DateCount,EndOfWeekDate FROM
(
    SELECT DATE(theDate + INTERVAL (7 - DAYOFWEEK(theDate)) DAY) EndOfWeekDate
    FROM mytable
) A GROUP BY EndOfWeekDate;

Minggu

SELECT COUNT(1) DateCount,EndOfWeekDate FROM
(
    SELECT DATE(theDate + INTERVAL (6 - WEEKDAY(theDate)) DAY) EndOfWeekDate
    FROM mytable
) A GROUP BY EndOfWeekDate;

Cobalah !!!

CAVEAT jika Anda menginginkan akhir minggu selain Sabtu dan Minggu, saya menulis sebuah algoritma gila pada 22 Sep 2011 untuk menghitung setiap minggu dimulai dan berakhir hari apa pun .


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.