У меня есть данные биометрического журнала сотрудника с флагом inoutmode
.Я пытаюсь получить подробный список времени перерыва и с разницей во времени.
inoutmode
4 в качестве прорыва и 5 в качестве взлома.
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (105, '2019-09-19', '14:00:13', 4);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (105, '2019-09-19', '16:07:08', 4);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (105, '2019-09-19', '16:07:18', 5);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (235, '2019-09-19', '15:44:26', 4);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (235, '2019-09-19', '16:37:58', 4);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (235, '2019-09-19', '20:01:11', 5);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (235, '2019-09-19', '20:01:25', 5);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (235, '2019-09-19', '20:30:29', 4);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (326, '2019-09-19', '15:58:30', 4);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (326, '2019-09-19', '19:34:09', 5);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (327, '2019-09-19', '15:44:19', 5);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (327, '2019-09-19', '15:55:37', 4);
INSERT INTO `tbl_downloadentry` (`EmpMachineID`, `shift_date`, `AttenTime`, `InOutMode`) VALUES (327, '2019-09-19', '19:59:38', 4);
вот мой ЖелаемыйВывод
| EmpMachineID | attendance_date | break_out | break_in | Diff |
|--------------|-----------------|------------|-----------|-----------|
| 235 | 2019-09-19 | 15:44:26 | | |
| | 2019-09-19 | 16:37:58 | | |
| | 2019-09-19 | | 20:01:11 | |
| | 2019-09-19 | 20:30:29 | 20:01:25 | 29:04 |
| 326 | 2019-09-19 | 19:34:09 | 15:58:30 | 03:35:39 |
Я старался изо всех сил, чтобы добиться результата.Вот мой попытанный запрос:
SELECT l2.empmachineid,
l2.shift_date,
l2.attentime,
l2.inoutmode
FROM tbl_downloadentry AS l2
WHERE l2.inoutmode IN ( 5, 4 )
AND l2.shift_date = "2019-09-19"
ORDER BY l2.empmachineid,
l2.shift_date,
l2.attentime ASC
Моя версия MySQL = 10.3.17-MariaDB-1-log
SELECT l2.EmpMachineID, l2.shift_date, l2.InOutMode,
case when l2.InOutMode=5 then l2.AttenTime END AS BreakOut,
case when l2.InOutMode=4 then l2.AttenTime END AS BreakIn
FROM tbl_downloadentry AS l2
WHERE l2.InOutMode IN (5, 4) AND l2.shift_date="2019-09-19"
ORDER BY l2.EmpMachineID, l2.shift_date, l2.AttenTime ASC
частично я получил записи, используя региструсловие, но 4 и 5 inoutmode должны быть в одной строке, чтобы рассчитать разницу во времени.Любая идея ...
Любые предложения приветствуются.