SELECT * FROM ( SELECT DATE_SUB( DATE(DATE_SUB( DATE_ADD(MAKEDATE(YEAR(t.IN_TIMESTAMP), 1), INTERVAL WEEK(t.IN_TIMESTAMP,2) WEEK), INTERVAL WEEKDAY( DATE_ADD(MAKEDATE(YEAR(t.IN_TIMESTAMP), 1), INTERVAL WEEK(t.IN_TIMESTAMP,2) WEEK) ) -1 DAY)), INTERVAL 2 DAY) START, DATE_ADD( DATE(DATE_SUB( DATE_ADD(MAKEDATE(YEAR(t.IN_TIMESTAMP), 1), INTERVAL WEEK(t.IN_TIMESTAMP,2) WEEK), INTERVAL WEEKDAY( DATE_ADD(MAKEDATE(YEAR(t.IN_TIMESTAMP), 1), INTERVAL WEEK(t.IN_TIMESTAMP,2) WEEK) ) -1 DAY)), INTERVAL 4 DAY) END, YEAR(t.IN_TIMESTAMP) YEAR, WEEK(t.IN_TIMESTAMP,2) WEEK, t.JOBCODE, ROUND(SUM(ROUND(IF((DAYOFWEEK(t.IN_TIMESTAMP))=1,TIMESTAMPDIFF(SECOND,t.IN_TIMESTAMP,t.OUT_TIMESTAMP)/3600,0),2)),1) SUN, ROUND(SUM(ROUND(IF((DAYOFWEEK(t.IN_TIMESTAMP))=2,TIMESTAMPDIFF(SECOND,t.IN_TIMESTAMP,t.OUT_TIMESTAMP)/3600,0),2)),1) MON, ROUND(SUM(ROUND(IF((DAYOFWEEK(t.IN_TIMESTAMP))=3,TIMESTAMPDIFF(SECOND,t.IN_TIMESTAMP,t.OUT_TIMESTAMP)/3600,0),2)),1) TUE, ROUND(SUM(ROUND(IF((DAYOFWEEK(t.IN_TIMESTAMP))=4,TIMESTAMPDIFF(SECOND,t.IN_TIMESTAMP,t.OUT_TIMESTAMP)/3600,0),2)),1) WED, ROUND(SUM(ROUND(IF((DAYOFWEEK(t.IN_TIMESTAMP))=5,TIMESTAMPDIFF(SECOND,t.IN_TIMESTAMP,t.OUT_TIMESTAMP)/3600,0),2)),1) THU, ROUND(SUM(ROUND(IF((DAYOFWEEK(t.IN_TIMESTAMP))=6,TIMESTAMPDIFF(SECOND,t.IN_TIMESTAMP,t.OUT_TIMESTAMP)/3600,0),2)),1) FRI, ROUND(SUM(ROUND(IF((DAYOFWEEK(t.IN_TIMESTAMP))=7,TIMESTAMPDIFF(SECOND,t.IN_TIMESTAMP,t.OUT_TIMESTAMP)/3600,0),2)),1) SAT, ROUND(SUM(ROUND(TIMESTAMPDIFF(SECOND,t.IN_TIMESTAMP,t.OUT_TIMESTAMP)/3600,2)),1) TOTAL FROM timeclock t WHERE ( YEAR(t.IN_TIMESTAMP) = YEAR(CURDATE()) AND WEEK(t.IN_TIMESTAMP,2) = WEEK(CURDATE(),2)-1 ) OR ( YEAR(t.IN_TIMESTAMP) = YEAR(CURDATE()) AND WEEK(t.IN_TIMESTAMP,2) = WEEK(CURDATE(),2)-2 ) OR ( YEAR(t.IN_TIMESTAMP) = YEAR(CURDATE()) AND WEEK(t.IN_TIMESTAMP,2) = WEEK(CURDATE(),2)-3 ) OR ( YEAR(t.IN_TIMESTAMP) = YEAR(CURDATE()) AND WEEK(t.IN_TIMESTAMP,2) = WEEK(CURDATE(),2)-4 ) OR ( YEAR(t.IN_TIMESTAMP) = YEAR(CURDATE()) AND WEEK(t.IN_TIMESTAMP,2) = WEEK(CURDATE(),2)-5 ) OR ( YEAR(t.IN_TIMESTAMP) = YEAR(CURDATE())-1 AND WEEK(t.IN_TIMESTAMP,2) = WEEK(CURDATE(),2)-1 ) OR ( YEAR(t.IN_TIMESTAMP) = YEAR(CURDATE())-2 AND WEEK(t.IN_TIMESTAMP,2) = WEEK(CURDATE(),2)-1 ) OR ( YEAR(t.IN_TIMESTAMP) = YEAR(CURDATE())-3 AND WEEK(t.IN_TIMESTAMP,2) = WEEK(CURDATE(),2)-1 ) GROUP BY CONCAT(YEAR(t.IN_TIMESTAMP),WEEK(t.IN_TIMESTAMP,2),t.JOBCODE) ORDER BY CONCAT(YEAR(t.IN_TIMESTAMP),WEEK(t.IN_TIMESTAMP,2),t.JOBCODE) ASC, DATE(t.IN_TIMESTAMP) ASC ) w ORDER BY w.JOBCODE ASC, w.YEAR DESC, w.WEEK DESC