在MySQL的同一表格行中计算总时间

时间:2018-08-18 07:42:02

标签: mysql time report

我有一个设计的出勤表,这是一般文件

  1. AttendanceMachineLoginId
  2. EmpId
  3. AttendanceDateTime

无论何时用户上班,他都必须出勤。 第一出席者将考虑登录,而第二出席者将考虑注销每次记录都会与时间一起添加。用户可以进行多次输入(一天内注销登录。像这样 enter image description here

EmpId 81在同一天内两次登录和注销。

现在,我的目标是每天生成员工报告,说明他已经花了多少分钟给公司。我只是知道TIMESTAMPDIFF()可以提供会议记录,但是我无法理解如何将其应用于表。另外,我想问一下,表格字段是否适合所需的报告,还是需要更改?

另一种策略:我还认为我应该在表中添加分钟列,并且每当用户注销时,我都应该计算分钟并在注销条目中添加该分钟。

以下是用于测试的示例数据:

INSERT INTO `attendancemachinelogin` (`AttendanceMachineLoginId`, `EmpId`, `TimeTrackId`, `AttendanceDateTime`, `RecordAddDateTime`) VALUES
(0, 81, 315079, '2018-8-15 14:8:46', '2018-08-15 14:09:25'),
(0, 81, 315079, '2018-8-15 14:20:38', '2018-08-15 14:21:17'),
(0, 81, 315079, '2018-8-15 14:21:9', '2018-08-15 14:21:47'),
(0, 81, 315079, '2018-8-15 14:28:37', '2018-08-15 14:29:16'),
(0, 81, 315079, '2018-8-15 14:28:58', '2018-08-15 14:29:36'),
(0, 81, 315079, '2018-8-15 14:36:42', '2018-08-15 14:37:21'),
(0, 81, 315079, '2018-8-15 15:36:34', '2018-08-15 15:37:13'),
(0, 81, 315079, '2018-8-15 15:52:39', '2018-08-15 15:53:17'),
(0, 81, 315079, '2018-8-15 16:5:38', '2018-08-15 16:06:17'),
(0, 81, 315079, '2018-8-15 16:6:50', '2018-08-15 16:07:29'),
(0, 81, 315079, '2018-8-15 16:8:49', '2018-08-15 16:09:29'),
(0, 81, 315079, '2018-8-15 16:18:28', '2018-08-15 16:19:08'),
(0, 81, 315079, '2018-8-15 16:20:49', '2018-08-15 16:21:28'),
(0, 81, 315079, '2018-8-15 16:23:18', '2018-08-15 16:23:58'),
(0, 81, 315079, '2018-8-15 16:24:3', '2018-08-15 16:24:42'),
(0, 81, 315079, '2018-8-15 16:24:47', '2018-08-15 16:25:26'),
(0, 81, 315079, '2018-8-15 16:24:58', '2018-08-15 16:25:37'),
(0, 81, 315079, '2018-8-15 16:25:54', '2018-08-15 16:26:33'),
(0, 81, 315079, '2018-8-15 16:56:47', '2018-08-15 16:57:27'),
(0, 101, 417092, '2018-8-15 17:37:53', '2018-08-15 17:38:32'),
(0, 101, 417092, '2018-8-15 18:4:34', '2018-08-15 18:05:14'),
(0, 101, 417092, '2018-8-15 18:7:43', '2018-08-15 18:08:22'),
(0, 81, 315079, '2018-8-15 18:13:15', '2018-08-15 18:13:54'),
(0, 81, 315079, '2018-8-17 10:50:16', '2018-08-17 10:50:54'),
(0, 101, 417092, '2018-8-17 10:51:54', '2018-08-17 10:52:31'),
(0, 4, 413034, '2018-8-17 11:45:16', '2018-08-17 11:45:54'),
(0, 91, 916086, '2018-8-17 11:59:34', '2018-08-17 12:00:12'),
(0, 81, 315079, '2018-8-17 12:0:19', '2018-08-17 12:00:56'),
(0, 81, 315079, '2018-8-17 15:7:41', '2018-08-17 15:08:17'),
(0, 101, 417092, '2018-8-17 15:9:54', '2018-08-17 15:10:32'),
(0, 101, 417092, '2018-8-17 15:10:9', '2018-08-17 15:10:45'),
(0, 101, 417092, '2018-8-17 15:10:23', '2018-08-17 15:10:59'),
(0, 101, 417092, '2018-8-17 15:10:25', '2018-08-17 15:11:02'),
(0, 101, 417092, '2018-8-17 15:11:6', '2018-08-17 15:11:43'),
(0, 101, 417092, '2018-8-17 15:11:15', '2018-08-17 15:11:52'),
(0, 101, 417092, '2018-8-17 15:11:17', '2018-08-17 15:11:54'),
(0, 81, 315079, '2018-8-17 15:11:32', '2018-08-17 15:12:09'),
(0, 81, 315079, '2018-8-17 15:12:32', '2018-08-17 15:13:09'),
(0, 81, 315079, '2018-8-17 15:35:33', '2018-08-17 15:36:10'),
(0, 81, 315079, '2018-8-17 15:41:58', '2018-08-17 15:42:34'),
(0, 81, 315079, '2018-8-17 15:42:17', '2018-08-17 15:42:54'),
(0, 81, 315079, '2018-8-17 16:8:25', '2018-08-17 16:09:01'),
(0, 81, 315079, '2018-8-17 16:8:32', '2018-08-17 16:09:08'),
(0, 101, 417092, '2018-8-17 16:8:53', '2018-08-17 16:09:30'),
(0, 101, 417092, '2018-8-17 16:9:20', '2018-08-17 16:09:57'),
(0, 4, 413034, '2018-8-17 16:10:16', '2018-08-17 16:10:53'),
(0, 36, 413037, '2018-8-17 16:10:46', '2018-08-17 16:11:23'),
(0, 81, 315079, '2018-8-17 16:22:21', '2018-08-17 16:22:58'),
(0, 101, 417092, '2018-8-17 16:22:45', '2018-08-17 16:23:21'),
(0, 4, 413034, '2018-8-17 16:23:12', '2018-08-17 16:23:49'),
(0, 81, 315079, '2018-8-17 16:23:35', '2018-08-17 16:24:12'),
(0, 81, 315079, '2018-8-17 16:44:4', '2018-08-17 16:44:42'),
(0, 101, 417092, '2018-8-17 16:44:22', '2018-08-17 16:44:58'),
(0, 81, 315079, '2018-8-17 17:6:51', '2018-08-17 17:07:28'),
(0, 101, 417092, '2018-8-17 17:7:8', '2018-08-17 17:07:45'),
(0, 4, 413034, '2018-8-17 17:7:52', '2018-08-17 17:08:28'),
(0, 81, 315079, '2018-8-17 17:9:25', '2018-08-17 17:10:02'),
(0, 101, 417092, '2018-8-17 17:9:46', '2018-08-17 17:10:22'),
(0, 4, 413034, '2018-8-17 17:10:6', '2018-08-17 17:10:42'),
(0, 81, 315079, '2018-8-17 17:10:24', '2018-08-17 17:11:01'),
(0, 81, 315079, '2018-8-17 17:10:39', '2018-08-17 17:11:15'),
(0, 101, 417092, '2018-8-17 17:10:47', '2018-08-17 17:11:24'),
(0, 101, 417092, '2018-8-17 17:10:58', '2018-08-17 17:11:35'),
(0, 81, 315079, '2018-8-17 17:11:10', '2018-08-17 17:11:46'),
(0, 101, 417092, '2018-8-17 17:11:31', '2018-08-17 17:12:09'),
(0, 4, 413034, '2018-8-17 17:40:40', '2018-08-17 17:41:18'),
(0, 101, 417092, '2018-8-17 17:41:23', '2018-08-17 17:41:59'),
(0, 36, 413037, '2018-8-17 17:41:37', '2018-08-17 17:42:14'),
(0, 81, 315079, '2018-8-17 17:42:9', '2018-08-17 17:42:45'),
(0, 3, 213020, '2018-8-17 17:47:34', '2018-08-17 17:48:11'),
(0, 81, 315079, '2018-8-17 17:48:16', '2018-08-17 17:48:52'),
(0, 4, 413034, '2018-8-17 17:48:59', '2018-08-17 17:49:36'),
(0, 4, 413034, '2018-8-17 17:49:59', '2018-08-17 17:50:36'),
(0, 36, 413037, '2018-8-17 17:52:36', '2018-08-17 17:53:13'),
(0, 101, 417092, '2018-8-17 17:52:53', '2018-08-17 17:53:29'),
(0, 6, 213016, '2018-8-17 17:53:30', '2018-08-17 17:54:06'),
(0, 81, 315079, '2018-8-17 17:53:44', '2018-08-17 17:54:20'),
(0, 4, 413034, '2018-8-17 17:54:27', '2018-08-17 17:55:03'),
(0, 3, 213020, '2018-8-17 17:54:49', '2018-08-17 17:55:27'),
(0, 4, 413034, '2018-8-17 17:55:23', '2018-08-17 17:56:00'),
(0, 36, 413037, '2018-8-17 17:58:33', '2018-08-17 17:59:10'),
(0, 101, 417092, '2018-8-17 17:58:47', '2018-08-17 17:59:24'),
(0, 102, 517094, '2018-8-17 17:59:4', '2018-08-17 17:59:40'),
(0, 81, 315079, '2018-8-17 17:59:33', '2018-08-17 18:00:09'),
(0, 4, 413034, '2018-8-17 18:0:16', '2018-08-17 18:00:52'),
(0, 3, 213020, '2018-8-17 18:0:40', '2018-08-17 18:01:17'),
(0, 6, 213016, '2018-8-17 18:1:30', '2018-08-17 18:02:06'),
(0, 36, 413037, '2018-8-17 18:26:24', '2018-08-17 18:27:01'),
(0, 101, 417092, '2018-8-17 18:26:38', '2018-08-17 18:27:14'),
(0, 6, 213016, '2018-8-17 18:27:9', '2018-08-17 18:27:45'),
(0, 81, 315079, '2018-8-17 18:27:24', '2018-08-17 18:28:00'),
(0, 102, 517094, '2018-8-17 18:27:38', '2018-08-17 18:28:14'),
(0, 4, 413034, '2018-8-17 18:28:13', '2018-08-17 18:28:49'),
(0, 81, 315079, '2018-8-17 19:36:49', '2018-08-17 19:37:26'),
(0, 101, 417092, '2018-8-17 19:37:17', '2018-08-17 19:37:54'),
(0, 102, 517094, '2018-8-17 19:37:30', '2018-08-17 19:38:07'),
(0, 36, 413037, '2018-8-17 19:38:13', '2018-08-17 19:38:50'),
(0, 4, 413034, '2018-8-17 19:38:54', '2018-08-17 19:39:32'),
(0, 3, 213020, '2018-8-17 19:39:58', '2018-08-17 19:40:35'),
(0, 101, 417092, '2018-8-18 10:21:26', '2018-08-18 10:22:03'),
(0, 81, 315079, '2018-8-18 10:30:23', '2018-08-18 10:31:09'),
(0, 4, 413034, '2018-8-18 10:31:46', '2018-08-18 10:32:27'),
(0, 102, 517094, '2018-8-18 10:32:15', '2018-08-18 10:32:53'),
(0, 6, 213016, '2018-8-18 10:32:44', '2018-08-18 10:33:22'),
(0, 3, 213020, '2018-8-18 10:33:23', '2018-08-18 10:34:03'),
(0, 81, 315079, '2018-8-18 10:42:49', '2018-08-18 10:43:27'),
(0, 101, 417092, '2018-8-18 10:43:25', '2018-08-18 10:44:03'),
(0, 81, 315079, '2018-8-18 10:48:51', '2018-08-18 10:49:30'),
(0, 102, 517094, '2018-8-18 10:49:9', '2018-08-18 10:49:49'),
(0, 81, 315079, '2018-8-18 10:56:46', '2018-08-18 10:57:25'),
(0, 1, 1211003, '2018-8-18 10:57:0', '2018-08-18 10:57:38'),
(0, 4, 413034, '2018-8-18 10:57:51', '2018-08-18 10:58:38'),
(0, 3, 213020, '2018-8-18 10:58:43', '2018-08-18 10:59:26');

2 个答案:

答案 0 :(得分:0)

SELECT EmpId, DATE(AttendanceDateTime), SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(RecordAddDateTime, AttendanceDateTime))))
FROM attendancemachinelogin
GROUP BY EmpId, DATE(AttendanceDateTime)

http://sqlfiddle.com/#!9/fd5f95/7

答案 1 :(得分:0)

抱歉,我必须出去,但这是使用行号模拟和mod(%)的部分解决方案

select x.*,y.empid,y.attendancedatetime,y.rn
from
(
select a.* ,
        if(a.empid <> @p, @rn:=1,@rn:=@rn+1) rn,
        @p:=a.empid p
from   `attendancemachinelogin` a
cross join (select@rn:=0,@p:=0) r
order by empid,AttendanceDateTime
) x
left join
(
select a.* ,
        if(a.empid <> @p1, @rn1:=1,@rn1:=@rn1+1) rn,
        @p1:=a.empid p
from   `attendancemachinelogin` a
cross join (select@rn1:=0,@p1:=0) r
order by empid,AttendanceDateTime
) y
on x.empid = y.empid and y.rn = x.rn+1
where x.rn % 2 > 0;

+--------------------------+-------+-------------+---------------------+---------------------+------+------+-------+---------------------+------+
| AttendanceMachineLoginId | EmpId | TimeTrackId | AttendanceDateTime  | RecordAddDateTime   | rn   | p    | empid | attendancedatetime  | rn   |
+--------------------------+-------+-------------+---------------------+---------------------+------+------+-------+---------------------+------+
|                        0 |     1 |     1211003 | 2018-08-18 10:57:00 | 2018-08-18 10:57:38 |    1 |    1 |  NULL | NULL                | NULL |
|                        0 |     3 |      213020 | 2018-08-17 17:47:34 | 2018-08-17 17:48:11 |    1 |    3 |     3 | 2018-08-17 17:54:49 |    2 |
|                        0 |     3 |      213020 | 2018-08-17 18:00:40 | 2018-08-17 18:01:17 |    3 |    3 |     3 | 2018-08-17 19:39:58 |    4 |
|                        0 |     3 |      213020 | 2018-08-18 10:33:23 | 2018-08-18 10:34:03 |    5 |    3 |     3 | 2018-08-18 10:58:43 |    6 |
|                        0 |     4 |      413034 | 2018-08-17 11:45:16 | 2018-08-17 11:45:54 |    1 |    4 |     4 | 2018-08-17 16:10:16 |    2 |
|                        0 |     4 |      413034 | 2018-08-17 16:23:12 | 2018-08-17 16:23:49 |    3 |    4 |     4 | 2018-08-17 17:07:52 |    4 |
|                        0 |     4 |      413034 | 2018-08-17 17:10:06 | 2018-08-17 17:10:42 |    5 |    4 |     4 | 2018-08-17 17:40:40 |    6 |
|                        0 |     4 |      413034 | 2018-08-17 17:48:59 | 2018-08-17 17:49:36 |    7 |    4 |     4 | 2018-08-17 17:49:59 |    8 |
|                        0 |     4 |      413034 | 2018-08-17 17:54:27 | 2018-08-17 17:55:03 |    9 |    4 |     4 | 2018-08-17 17:55:23 |   10 |
|                        0 |     4 |      413034 | 2018-08-17 18:00:16 | 2018-08-17 18:00:52 |   11 |    4 |     4 | 2018-08-17 18:28:13 |   12 |
|                        0 |     4 |      413034 | 2018-08-17 19:38:54 | 2018-08-17 19:39:32 |   13 |    4 |     4 | 2018-08-18 10:31:46 |   14 |
|                        0 |     4 |      413034 | 2018-08-18 10:57:51 | 2018-08-18 10:58:38 |   15 |    4 |  NULL | NULL                | NULL |
|                        0 |     6 |      213016 | 2018-08-17 17:53:30 | 2018-08-17 17:54:06 |    1 |    6 |     6 | 2018-08-17 18:01:30 |    2 |
|                        0 |     6 |      213016 | 2018-08-17 18:27:09 | 2018-08-17 18:27:45 |    3 |    6 |     6 | 2018-08-18 10:32:44 |    4 |
|                        0 |    36 |      413037 | 2018-08-17 16:10:46 | 2018-08-17 16:11:23 |    1 |   36 |    36 | 2018-08-17 17:41:37 |    2 |
|                        0 |    36 |      413037 | 2018-08-17 17:52:36 | 2018-08-17 17:53:13 |    3 |   36 |    36 | 2018-08-17 17:58:33 |    4 |
|                        0 |    36 |      413037 | 2018-08-17 18:26:24 | 2018-08-17 18:27:01 |    5 |   36 |    36 | 2018-08-17 19:38:13 |    6 |
|                        0 |    81 |      315079 | 2018-08-15 14:08:46 | 2018-08-15 14:09:25 |    1 |   81 |    81 | 2018-08-15 14:20:38 |    2 |
|                        0 |    81 |      315079 | 2018-08-15 14:21:09 | 2018-08-15 14:21:47 |    3 |   81 |    81 | 2018-08-15 14:28:37 |    4 |
|                        0 |    81 |      315079 | 2018-08-15 14:28:58 | 2018-08-15 14:29:36 |    5 |   81 |    81 | 2018-08-15 14:36:42 |    6 |
|                        0 |    81 |      315079 | 2018-08-15 15:36:34 | 2018-08-15 15:37:13 |    7 |   81 |    81 | 2018-08-15 15:52:39 |    8 |
|                        0 |    81 |      315079 | 2018-08-15 16:05:38 | 2018-08-15 16:06:17 |    9 |   81 |    81 | 2018-08-15 16:06:50 |   10 |
|                        0 |    81 |      315079 | 2018-08-15 16:08:49 | 2018-08-15 16:09:29 |   11 |   81 |    81 | 2018-08-15 16:18:28 |   12 |
|                        0 |    81 |      315079 | 2018-08-15 16:20:49 | 2018-08-15 16:21:28 |   13 |   81 |    81 | 2018-08-15 16:23:18 |   14 |
|                        0 |    81 |      315079 | 2018-08-15 16:24:03 | 2018-08-15 16:24:42 |   15 |   81 |    81 | 2018-08-15 16:24:47 |   16 |
|                        0 |    81 |      315079 | 2018-08-15 16:24:58 | 2018-08-15 16:25:37 |   17 |   81 |    81 | 2018-08-15 16:25:54 |   18 |
|                        0 |    81 |      315079 | 2018-08-15 16:56:47 | 2018-08-15 16:57:27 |   19 |   81 |    81 | 2018-08-15 18:13:15 |   20 |
|                        0 |    81 |      315079 | 2018-08-17 10:50:16 | 2018-08-17 10:50:54 |   21 |   81 |    81 | 2018-08-17 12:00:19 |   22 |
|                        0 |    81 |      315079 | 2018-08-17 15:07:41 | 2018-08-17 15:08:17 |   23 |   81 |    81 | 2018-08-17 15:11:32 |   24 |
|                        0 |    81 |      315079 | 2018-08-17 15:12:32 | 2018-08-17 15:13:09 |   25 |   81 |    81 | 2018-08-17 15:35:33 |   26 |
|                        0 |    81 |      315079 | 2018-08-17 15:41:58 | 2018-08-17 15:42:34 |   27 |   81 |    81 | 2018-08-17 15:42:17 |   28 |
|                        0 |    81 |      315079 | 2018-08-17 16:08:25 | 2018-08-17 16:09:01 |   29 |   81 |    81 | 2018-08-17 16:08:32 |   30 |
|                        0 |    81 |      315079 | 2018-08-17 16:22:21 | 2018-08-17 16:22:58 |   31 |   81 |    81 | 2018-08-17 16:23:35 |   32 |
|                        0 |    81 |      315079 | 2018-08-17 16:44:04 | 2018-08-17 16:44:42 |   33 |   81 |    81 | 2018-08-17 17:06:51 |   34 |
|                        0 |    81 |      315079 | 2018-08-17 17:09:25 | 2018-08-17 17:10:02 |   35 |   81 |    81 | 2018-08-17 17:10:24 |   36 |
|                        0 |    81 |      315079 | 2018-08-17 17:10:39 | 2018-08-17 17:11:15 |   37 |   81 |    81 | 2018-08-17 17:11:10 |   38 |
|                        0 |    81 |      315079 | 2018-08-17 17:42:09 | 2018-08-17 17:42:45 |   39 |   81 |    81 | 2018-08-17 17:48:16 |   40 |
|                        0 |    81 |      315079 | 2018-08-17 17:53:44 | 2018-08-17 17:54:20 |   41 |   81 |    81 | 2018-08-17 17:59:33 |   42 |
|                        0 |    81 |      315079 | 2018-08-17 18:27:24 | 2018-08-17 18:28:00 |   43 |   81 |    81 | 2018-08-17 19:36:49 |   44 |
|                        0 |    81 |      315079 | 2018-08-18 10:30:23 | 2018-08-18 10:31:09 |   45 |   81 |    81 | 2018-08-18 10:42:49 |   46 |
|                        0 |    81 |      315079 | 2018-08-18 10:48:51 | 2018-08-18 10:49:30 |   47 |   81 |    81 | 2018-08-18 10:56:46 |   48 |
|                        0 |    91 |      916086 | 2018-08-17 11:59:34 | 2018-08-17 12:00:12 |    1 |   91 |  NULL | NULL                | NULL |
|                        0 |   101 |      417092 | 2018-08-15 17:37:53 | 2018-08-15 17:38:32 |    1 |  101 |   101 | 2018-08-15 18:04:34 |    2 |
|                        0 |   101 |      417092 | 2018-08-15 18:07:43 | 2018-08-15 18:08:22 |    3 |  101 |   101 | 2018-08-17 10:51:54 |    4 |
|                        0 |   101 |      417092 | 2018-08-17 15:09:54 | 2018-08-17 15:10:32 |    5 |  101 |   101 | 2018-08-17 15:10:09 |    6 |
|                        0 |   101 |      417092 | 2018-08-17 15:10:23 | 2018-08-17 15:10:59 |    7 |  101 |   101 | 2018-08-17 15:10:25 |    8 |
|                        0 |   101 |      417092 | 2018-08-17 15:11:06 | 2018-08-17 15:11:43 |    9 |  101 |   101 | 2018-08-17 15:11:15 |   10 |
|                        0 |   101 |      417092 | 2018-08-17 15:11:17 | 2018-08-17 15:11:54 |   11 |  101 |   101 | 2018-08-17 16:08:53 |   12 |
|                        0 |   101 |      417092 | 2018-08-17 16:09:20 | 2018-08-17 16:09:57 |   13 |  101 |   101 | 2018-08-17 16:22:45 |   14 |
|                        0 |   101 |      417092 | 2018-08-17 16:44:22 | 2018-08-17 16:44:58 |   15 |  101 |   101 | 2018-08-17 17:07:08 |   16 |
|                        0 |   101 |      417092 | 2018-08-17 17:09:46 | 2018-08-17 17:10:22 |   17 |  101 |   101 | 2018-08-17 17:10:47 |   18 |
|                        0 |   101 |      417092 | 2018-08-17 17:10:58 | 2018-08-17 17:11:35 |   19 |  101 |   101 | 2018-08-17 17:11:31 |   20 |
|                        0 |   101 |      417092 | 2018-08-17 17:41:23 | 2018-08-17 17:41:59 |   21 |  101 |   101 | 2018-08-17 17:52:53 |   22 |
|                        0 |   101 |      417092 | 2018-08-17 17:58:47 | 2018-08-17 17:59:24 |   23 |  101 |   101 | 2018-08-17 18:26:38 |   24 |
|                        0 |   101 |      417092 | 2018-08-17 19:37:17 | 2018-08-17 19:37:54 |   25 |  101 |   101 | 2018-08-18 10:21:26 |   26 |
|                        0 |   101 |      417092 | 2018-08-18 10:43:25 | 2018-08-18 10:44:03 |   27 |  101 |  NULL | NULL                | NULL |
|                        0 |   102 |      517094 | 2018-08-17 17:59:04 | 2018-08-17 17:59:40 |    1 |  102 |   102 | 2018-08-17 18:27:38 |    2 |
|                        0 |   102 |      517094 | 2018-08-17 19:37:30 | 2018-08-17 19:38:07 |    3 |  102 |   102 | 2018-08-18 10:32:15 |    4 |
|                        0 |   102 |      517094 | 2018-08-18 10:49:09 | 2018-08-18 10:49:49 |    5 |  102 |  NULL | NULL                | NULL |
+--------------------------+-------+-------------+---------------------+---------------------+------+------+-------+---------------------+------+
59 rows in set (0.00 sec)