У меня есть система контроля доступа RFID.Исходя из этой таблицы, я хотел бы получить запрос, который позволит мне получить график времени посещаемости дня, разбитого на 10 минут.
Структура таблицы следующая:
id
id_rfid
- ...
type
(0 = вход или 1 = выход) success
(0 = да или 1 = нет) - ...
created_at
(отметка времени)
Я пытался (в моей тестовой среде с MySQL 5.7) с этим запросом, но получить неожиданные результаты.Что не так?
SELECT
*,
SUM(`i`.`conteggio`) AS `cumulativo`
-- FROM_UNIXTIME(CEIL(`i`.`created_at`/(10 * 60))*(10 * 60)) AS datetime
FROM
(
SELECT
`id`,
`id_rfid`,
CASE
WHEN `type` = 0 AND `success` = 0 THEN 1
WHEN `type` = 1 AND `success` = 0 THEN -1
ELSE 0
END AS `conteggio`,
`created_at`,
FROM_UNIXTIME(`created_at`) AS `created_datetime`
FROM
`tbl_ingresso`
LIMIT 100
) AS i
JOIN
(
SELECT
`id`,
`id_rfid`,
CASE
WHEN `type` = 0 AND `success` = 0 THEN 1
WHEN `type` = 1 AND `success` = 0 THEN -1
ELSE 0
END AS `conteggio`,
`created_at`,
FROM_UNIXTIME(`created_at`) AS `created_datetime`
FROM
`tbl_ingresso`
LIMIT 100
) AS j
ON
DATE(FROM_UNIXTIME(`i`.`created_at`)) = DATE(FROM_UNIXTIME(`j`.`created_at`)) AND
`i`.`created_at` >= `j`.`created_at`
GROUP BY
1,4
-- CEIL(`i`.`created_at`/(10 * 60))
-- LIMIT 100
;
РЕЗУЛЬТАТ:
id id_rfid conteggio created_at created_datetime ... cumulativo
2 1 1 1479110294 2016-11-14 08:58:14 1
3 92 1 1479111188 2016-11-14 09:13:08 2
4 40 1 1479111220 2016-11-14 09:13:40 3
5 101 1 1479111227 2016-11-14 09:13:47 4
6 100 1 1479112470 2016-11-14 09:34:30 5
7 100 1 1479112483 2016-11-14 09:34:43 6
8 74 1 1479113518 2016-11-14 09:51:58 7
9 128 1 1479113608 2016-11-14 09:53:28 8
10 117 1 1479113671 2016-11-14 09:54:31 9
11 55 1 1479113866 2016-11-14 09:57:46 10
12 40 -1 1479114971 2016-11-14 10:16:11 -11 (expected result: 9)
13 92 -1 1479114980 2016-11-14 10:16:20 -12 (expected result: 8)
14 125 1 1479115206 2016-11-14 10:20:06 13 (expected result: 9)
15 126 1 1479115212 2016-11-14 10:20:12 14 (expected result: 10)
16 33 1 1479115218 2016-11-14 10:20:18 15 ...
17 101 -1 1479116013 2016-11-14 10:33:33 -16
18 128 -1 1479117003 2016-11-14 10:50:03 -17
19 117 -1 1479117324 2016-11-14 10:55:24 -18
20 128 1 1479117548 2016-11-14 10:59:08 19
21 1 -1 1479117669 2016-11-14 11:01:09 -20
22 131 1 1479117952 2016-11-14 11:05:52 21
23 129 1 1479118134 2016-11-14 11:08:54 22
24 1 1 1479119066 2016-11-14 11:24:26 23
25 126 -1 1479119237 2016-11-14 11:27:17 -24
26 125 -1 1479119244 2016-11-14 11:27:24 -25
ОБНОВЛЕНИЕ: Спасибо @muhamed за правильный ответ.Первый шаг в порядке.Теперь мне нужно отрезать время, чтобы получить такой результат:
cumulativo datetime
1 2016-11-14 09:00:00
4 2016-11-14 09:20:00
6 2016-11-14 09:40:00
10 2016-11-14 10:00:00
8 2016-11-14 10:20:00
11 2016-11-14 10:30:00
10 2016-11-14 10:40:00
9 2016-11-14 11:00:00
10 2016-11-14 11:10:00
...