Mysql Tutorial: Menampilkan data dalam seminggu

Oleh: Admin - Fri, 03 May, 2019

Weekly Data Query

Hellooo soobbb... lagi asik belajar query mysql nih sob, ehh dapet case gini.
Jadi gw disuruh nampilin data per-minggu (weekly) tapi namanya juga masih awam yaah :D jadi muter-muter deh nih kepala hahahaa.

Case -nya gini sob, data yang mau ditampilin itu 1 minggu (senin - minggu), misal hari senin itu tanggal 1 dan hari minggunya berati tanggal 7, terus gw mau nampilin tanggal itu secara berurutan (senin - minggu) tadi dengan patokan tanggal hari ini (current date) server mysql -nya.

Alhasil terbentuklah query dibawah, dan you know sob ternyata dari query yang gw bikin ini udah ada dong versi bawaan mysql -nya hahahaaa (bisa lihat query berikutnya sob):

SELECT
	COUNT(*) total,
    DATE(r.created_at) tanggal,
    DATE_FORMAT(r.created_at, '%a') hari
FROM tbl_request r
WHERE
	DATE(r.created_at) BETWEEN DATE(
    	NOW()
        + INTERVAL (
        	CASE
            WHEN DAYOFWEEK(NOW()) = 1 THEN 1 -- sunday
            WHEN DAYOFWEEK(NOW()) = 2 THEN 0 -- monday
            WHEN DAYOFWEEK(NOW()) = 3 THEN -1 -- tuesday
            WHEN DAYOFWEEK(NOW()) = 4 THEN -2 -- wednesday
            WHEN DAYOFWEEK(NOW()) = 5 THEN -3 -- thursday
            WHEN DAYOFWEEK(NOW()) = 6 THEN -4 -- friday
            ELSE -5 -- saturday
            END
        ) DAY
    ) AND DATE(
    	NOW()
        - INTERVAL (
        	CASE
            WHEN DAYOFWEEK(NOW()) = 1 THEN 0 -- sunday
            WHEN DAYOFWEEK(NOW()) = 2 THEN -6 -- monday
            WHEN DAYOFWEEK(NOW()) = 3 THEN -5 -- tuesday
            WHEN DAYOFWEEK(NOW()) = 4 THEN -4 -- wednesday
            WHEN DAYOFWEEK(NOW()) = 5 THEN -3 -- thursday
            WHEN DAYOFWEEK(NOW()) = 6 THEN -2 -- friday
            ELSE -1 -- saturday
            END
        ) DAY
    )
GROUP BY DATE(r.created_at)
ORDER BY DATE(r.created_at) ASC

Nah query dibawah ini versi bawaan mysql -nya sob, bisa dibandingin ya lebih ringkes hahahhaaa.
Gw udah pusing mikirin logika case diatas tadi, ternyata udah disediain sama mysql fungsi praktisnya. Tapi ya alhamdulillah nambah ilmu lagi dan case tadi pun solve dengan cara gw sendiri :D .

SELECT
    COUNT(*) total,
    DATE(r.created_at) tanggal,
    DATE_FORMAT(r.created_at, '%a') hari
FROM tbl_request r
WHERE
    YEARWEEK(r.created_at, 1) = YEARWEEK(NOW(), 1)
GROUP BY DATE(r.created_at)
ORDER BY DATE(r.created_at) ASC

Oke sob, sekian tutorial hari ini.
Sampai jumpa lain waktu, terus belajar, rajin-rajin mantengin web gw ini hahahhaaa. 
Semoga bermanfaat buat kita semua, wassalam.