Есть ли способ отобразить только одну строку с общей суммой, в настоящее время его отображение двух строк в качестве вывода - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть четыре столбца (идентификатор водителя, время начала, время окончания, потраченные минуты). Когда будет заполнен столбец времени начала входа пользователя в систему и когда будет заполнено время окончания выхода пользователя из системы и будет подсчитано общее количество минут.И каждый раз, когда пользователь входит в систему, будет вставлена ​​новая строка

Я пытаюсь отобразить общее количество минут, потраченных на каждый конкретный день

Например

Date (13 - 2  - 2019) -  630 minutes  spent 

Date ( 12 - 2 - 2019) -  450 minutes  spent 
etc... 

Но в моем случае12 -2 -2019 (4:00) по 13 -2 - 2019 (3.59AM) считается одним днем ​​

от бэкэнда, который закодирован таким образом, что если пользователь вошел в систему с (13-2-2019)(2 утра) до (13-2-2019) (6 утра) .. он будет хранить две строки в базе данных.как показано ниже: -

Driver ID  |  start time      | End time           | min spent 

3229       |  (13-2-2019)(2am)| (13-2-2019)(3.59am)|    120

3229       |  (13-2-2019)(4am) (13-2-2019)(6.00am) |   120

Из вышеприведенного примера 1-й ряд мин. строки должен быть за 12-2-2019 Дата.Для этого я использовал запрос BETWEEN, как показано ниже.

Ниже запрос выведет два результата: -

$sql = "SELECT * , date(start_time),sum(minutes_spent) FROM 
driver_online_session where driver_id='3229' AND
start_time    BETWEEN '2019-02-12 03:59:59' AND  '2019-02-13 03:59:59'
 GROUP by date(start_time)
 ORDER BY start_time DESC";

enter image description here

Текущий вывод: -

id  3229  date : 2019-02-13 01:07:20  min spent : 61

id: 3229  date : 2019-02-12 04:00:00  min spent : 1024

Мой ожидаемый результат должен быть

id  3229  date : 2019-02-12 04:00:00  min spent : 1085

Пожалуйста, помогите мне решить этот вопрос.Спасибо

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Нашли решение: - Вычтите, вычтите 4 часа из значения даты и времени и группы

$sql = "SELECT driver_id , DATE(start_time - interval 4 hour),
SUM(minutes_spent) 
FROM driver_online_session 
where driver_id='3229' AND
start_time    BETWEEN '2019-02-11 03:59:59' AND  '2019-02-14 03:59:59'
GROUP by DATE(start_time - interval 4 hour)
ORDER BY date(start_time) DESC";
0 голосов
/ 13 февраля 2019

Вы пытались удалить start_time из группы с помощью (и, возможно, также и из выбора) и просто группировать по идентификатору драйвера (или не группировать по чему-либо, поскольку идентификатор драйвера уже ограничен одним значением))?

Поскольку вы также ограничиваете, какое время начала может быть возвращено одним «днем» (как вы определите), он должен просто вернуть все строки, где время начала находится в допустимом диапазоне, и суммироватьобщее количество всех этих строк.А поскольку вы уже знаете «день», вам не нужно выводить его.

Попробуйте это:

SELECT 
  driver_id, sum(minutes_spent) 
FROM 
  driver_online_session 
WHERE
  driver_id='3229' AND
  start_time BETWEEN '2019-02-12 03:59:59' AND  '2019-02-13 03:59:59'

Конечно, если вам нужно более общее решение (например, гдеВы можете показывать много «дней» одновременно), тогда это не будет работать слишком хорошо - вам нужно будет найти способ группировки по вашему пользовательскому диапазону времени - но это даст вам отправную точку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...