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.

randomx
sumber

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 .

RolandoMySQLDBA
sumber
1

Gunakan LAST_DAY().

Dokumentasi ada di sini .

Philᵀᴹ
sumber
2
Ini mengembalikan hari terakhir bulan itu , bukan minggu.
Danny Beckett