Основная проблема заключается в том, что вы не должны группировать по InOut (datetime), поэтому в результате max и min совпадают.На самом деле, это отменяет группировку, которую вы хотите выполнять ежедневно.
SELECT
CONVERT(NVARCHAR(12),MIN(Punch_history.Empcode)) as EmpCode,
CONVERT(DATE , Max(InOut)) as Report_date,
CONVERT(NVARCHAR(10),min(InOut),108) as InTime,
CONVERT(NVARCHAR(10),max(InOut),108) as OutTime
FROM Punch_history
where datediff(day, CAST(InOut as DATE ) , CAST(getdate() as DATE ) )=1
group by EmpID
Кроме того, если empid и empcode равны 1-1 (по логике, они должны быть), то вы можете группировать напрямую с помощью empcode, или оба они избегают этого довольно странного значения Min (empcode).