Следующий sql работает нормально и возвращает 90 записей, как ожидалось, а также счетчик верен, но при добавлении фильтрации дат в sql он возвращает только 44 строки вместо 90, но общее количество верный.Оператор mysql с фильтрацией даты не работает
SQL без даты фильтрации:
sql without date filtering:
SELECT
t4.firstname,
t1.category
,COUNT(t3.catid) as days
FROM category AS t1
LEFT JOIN (SELECT
DISTINCT empid,t1.catid
FROM attendance AS t2
LEFT JOIN category AS t1 ON (t1.catid>0)
) AS t2
ON (t1.catid=t2.catid)
LEFT JOIN attendance AS t3 ON (t2.empid=t3.empid AND t3.catid=t2.catid)
left join employee t4 on t2.empId=t4.empid
GROUP BY t2.empid,t2.catid
ORDER BY t2.empid,t2.catid;
с датой фильтрации:
SELECT
t4.firstname,
t1.category
,COUNT(t3.catid) as days
FROM category AS t1
LEFT JOIN (SELECT
DISTINCT empid,t1.catid
FROM attendance AS t2
LEFT JOIN category AS t1 ON (t1.catid>0)
) AS t2
ON (t1.catid=t2.catid)
LEFT JOIN attendance AS t3 ON (t2.empid=t3.empid AND t3.catid=t2.catid)
left join employee t4 on t2.empId=t4.empid
where
date_format(dateIn, '%Y-%m-%d')>=str_to_date("1/01/2015", '%m/%d/%Y')
and date_format(dateout, '%Y-%m-%d')<=str_to_date("12/31/2015", '%m/%d/%Y')
GROUP BY t2.empid,t2.catid
ORDER BY t2.empid,t2.catid;
Возможно, вы захотите включить некоторые данные образца. Вы сравниваете строку с датой: date_format (dateIn, '% Y-% m-% d')> = str_to_date ("1/01/2015", '% m /% d /% Y') '. Вы всегда должны сравнивать подобные типы. – JRD