I have to get a records/count on monthly basis. There is no of ways to do ---
1
SELECT COUNT(1)AS approved FROM lu_registration
WHERE MONTH(approved_date)=MONTH(NOW()) AND YEAR(approved_date)=YEAR(NOW());
2
SELECT COUNT(1)AS approved FROM lu_registration
WHERE DATE_FORMATE(approved_date, '%Y-%m')=DATE_FORMATE(NOW(), '%Y-%m');
3
SELECT COUNT(CASE WHEN MONTH(approved_date)=MONTH(NOW())
AND YEAR(approved_date)=YEAR(NOW()) THEN 1 END)AS approved FROM lu_registration;
4
SELECT COUNT(CASE WHEN DATE_FORMATE(approved_date, '%Y-%m')=DATE_FORMATE(NOW(), '%Y-%m')
THEN 1 END)AS approved FROM lu_registration;
Which one is best.
Actual Senerio: There is a month filter by which we select month,and get as 04-2016. So that we can use date_format (%m-%y) or month=04 & year=2016 to match for getting records.but which one is performance wise better
Actual query to optimize is:
SELECT COUNT(CASE WHEN status='A' AND MONTH(approved_date)=04
AND YEAR(approved_date)=2016 THEN 1 END)AS approved, COUNT(CASE WHEN status='D' AND MONTH(reject_date)=04
AND YEAR(reject_date)=2016 THEN 1 END)AS rejected FROM lu_registration;
Here is approved_date & reject_date two different column or approved user also be rejected