У меня есть таблица MySQL. Мне нужно получить «Min In Time» и «Max Out Time» от MySQL Query. Я IN_AM
только IN_AM
и OUT_PM
. Как сравнить IN_AM
и IN_PM
и сравнить два времени и выбор времени. и Сравнение Два раза и выборка Макс. Моя таблица –
Я пробовал это. но не работает, потому что пустой столбец.
SELECT *, LEAST(IN_AM, IN_PM) AS intime, GREATEST(OUT_AM, OUT_PM) AS outtime FROM bio_attandence where date(STR_TO_DATE(attandence_date,'%d/%m/%Y')) >= date('$startdate') AND date(STR_TO_DATE(attandence_date,'%d/%m/%Y')) < date('$enddATE') AND bio_id=".$row['form_no']." GROUP BY bio_id, attandence_date order by attandence_date
Вы можете добавить COALESCE
качестве обходного пути для нулевых значений: LEAST(COALESCE(IN_AM, IN_PM), COALESCE(IN_PM, IN_AM)) AS intime, GREATEST(COALESCE(OUT_AM, OUT_PM), COALESCE(OUT_PM, OUT_AM)) AS outtime
– бит громоздкий, но должен работать
Вы можете сделать так:
Select IF(IN_AM IS NULL OR IN_PM IS NULL, COALESCE(IN_AM, IN_PM), LEAST(IN_AM,IN_PM)) AS intime, IF(OUT_AM IS NULL OR OUT_AM IS NULL, COALESCE(OUT_AM, OUT_AM), GREATEST(OUT_AM, OUT_AM)) AS outtime FROM bio_attandence where date(STR_TO_DATE(attandence_date,'%d/%m/%Y')) >= date('$startdate') AND date(STR_TO_DATE(attandence_date,'%d/%m/%Y')) < date('$enddATE') AND bio_id=".$row['form_no']." GROUP BY bio_id, attandence_date HAVING intime IS NOT NULL AND outtime IS NOT NULL order by attandence_date