Как использовать условие IF для сравнения даты с SQL - PullRequest
1 голос
/ 21 мая 2019

У меня есть таблица MS ACCESS с компьютера посещаемости, которая состоит из столбца USERID, CHECKTIME.

Имея SQL-запрос ниже в MS Access, мне удается отсортировать и найти MIN (дата и время) в качестве времени начала / входа и MAX (дата и время) в качестве времени ожидания в течение дня (дата / рабочая_дата)

SELECT MIN(a.CHECKTIME) as work_start_time,  MAX(a.CHECKTIME)   as work_end_time,  b.CheckDate as work_date, WEEKDAY(b.CheckDate,2) as work_day, a.USERID  as user_id 

FROM CHECKINOUT a RIGHT JOIN (
  SELECT DISTINCT
  DateValue(CHECKTIME) as CheckDate,
  USERID FROM CHECKINOUT
  WHERE ( MONTH(CHECKTIME) = 4  )
  AND YEAR(CHECKTIME) = 2019 AND USERID =50
)      

b on a.USERID = b.USERID
and DateValue(a.CHECKTIME) = b.CheckDate GROUP BY b.checkDate, a.USERID

Результат запроса:

Work_start_Time        | work_end_time        | Work_date | Work_day |User_ID
1/04/2019 8:30:19 AM   | 1/04/2019 8:30:19 AM |  1/04/2019| 1        |50
2/04/2019 12:16:38 AM  | 2/04/2019 9:40:52 AM |  2/04/2019| 2        |50
3/04/2019 1:25:29 AM   | 3/04/2019 1:25:29 AM |  3/04/2019| 3        |50
4/04/2019 7:09:26 AM   | 4/04/2019 9:10:37 PM |  4/04/2019| 4        |50

Что я хотел бы сделать, если на следующий день (CHECKTIME +1) work_start_time меньше 5 часов утра, то MIN (CHECKTIME) следующего дня становится Work_end_time.

SELECT MIN(a.CHECKTIME) as work_start_time,  

IF (MIN(a.CHECKTIME+1) < 5:00:00 AM )
 MIN(a.CHECKTIME+1) as work_end_time,
ELSE
 MAX(a.CHECKTIME)   as work_end_time, 

 b.CheckDate as work_date, WEEKDAY(b.CheckDate,2) as work_day, a.USERID  as user_id 

FROM CHECKINOUT a RIGHT JOIN (
  SELECT DISTINCT
  DateValue(CHECKTIME) as CheckDate,
  USERID FROM CHECKINOUT
  WHERE ( MONTH(CHECKTIME) = 4  )
  AND YEAR(CHECKTIME) = 2019 AND USERID =50
)        

b on a.USERID = b.USERID
and DateValue(a.CHECKTIME) = b.CheckDate GROUP BY b.checkDate, a.USERID

Результат запроса:

Work_start_Time        | work_end_time        | Work_date | Work_day |User_ID
1/04/2019 8:30:19 AM   | 2/04/2019 12:16:38AM |  1/04/2019| 1        |50
2/04/2019 9:40:52 AM   | 3/04/2019 1:25:29 AM |  2/04/2019| 2        |50
3/04/2019 1:25:29 AM   | 3/04/2019 1:25:29 AM |  3/04/2019| 3        |50
4/04/2019 7:09:26 AM   | 4/04/2019 9:10:37 PM |  4/04/2019| 4        |50

1 Ответ

0 голосов
/ 21 мая 2019

Попробуйте использовать IIF :

IIF(TimeValue(MIN(a.CHECKTIME)) < #05:00:00#), MIN(a.CHECKTIME+1), MAX(a.CHECKTIME)) as work_end_time, 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...