Мне сложно найти правильный запрос, пожалуйста, помогите. Пояснения: У меня есть таблица, в которой строки вставляются на основе состояния входа. таблица выглядит следующим образом (его часть):Значения SQL TIMESTAMPDIFF, упорядоченные по дневным записям
+----------+------------+-----------+---------+---------------------+
| username | view_start | view_stop | action | action_time |
+----------+------------+-----------+---------+---------------------+
| adrian | 10:00:00 | | log-in | 2015-09-01/10:00:00 |
| adrian | 10:00:00 | 10:35:00 | log-off | 2015-09-01/10:35:00 |
| john | 12:00:00 | | log-in | 2015-09-01/12:00:00 |
| john | 12:00:00 | 12:45:00 | log-off | 2015-09-01/12:45:00 |
+----------+------------+-----------+---------+---------------------+
Я хочу получить следующие вещи:
сосчитать различия между
view_start
иview_stop
для строк, которые имеют действиеlog-off
(последнее действие, которое они совершили)заказать этот список на основе детского времени (общее время, когда пользователи были зарегистрированы в этот день)
То, что я достиг до сих пор:
я насчитал и заказал всего пользователей на основе днем
SELECT DATE(action_time) Date, COUNT(DISTINCT username) totalCOunt
FROM audit_data
GROUP BY DATE(action_time)
Выход:
+------------+------------+
| date | totalCOunt |
+------------+------------+
| 2015-09-01 | 5 |
| 2015-09-02 | 3 |
| 2015-09-03 | 1 |
| 2015-09-04 | 7 |
+------------+------------+
Я подсчитал разницу между двумя датами
SELECT view_start, view_stop,username, TIMESTAMPDIFF(MINUTE, view_start, view_stop) AS MinuteDiff
FROM audit_data
WHERE action = "off-line"
ORDER BY username
+------------+-----------+----------+------------+
| view_start | view_stop | username | MinuteDiff |
+------------+-----------+----------+------------+
| 10:00:00 | 11:00:00 | adrian | 60 |
| 11:00:00 | 12:00:00 | adrian | 60 |
| 12:00:00 | 13:00:00 | john | 60 |
| 13:00:00 | 14:00:00 | george | 60 |
+------------+-----------+----------+------------+
Я хочу «объединить» эти запросы, чтобы вычислить общее время, чтобы пользователи были зарегистрированы в, в дни:
+-------------+---------------------+
| day | totalDiff (minutes) |
+-------------+---------------------+
| 2015-09-01 | 120 |
| 2015-09-02 | 38 |
| 2015-09-03 | 76 |
| 2015-09-04 | 156 |
+-------------+---------------------+
Важная деталь: Пользователь может войти, несколько раз в день
Запрос, что я пробовал: SELECT DATE(action_time) Date, COUNT(SELECT SUM(SELECT TIMESTAMPDIFF(MINUTE, view_start, view_stop))) totalCOunt FROM audit_data GROUP BY DATE(action_time)
Что делать, если пользователь зарегистрирован более чем в полночь? – dnoeth
Умный вопрос ... Думаю, это будет засчитано на следующий день. Данные не обязательно должны быть предельно точными – Adrian
Какая СУБД вы используете? 'action =" off-line "' является нестандартным SQL –