有没有办法只显示总和的一行,目前它显示两行作为输出

时间:2019-02-13 12:35:49

标签: php mysqli

我有四列(驱动程序ID,开始时间,结束时间,花费的分钟) “用户登录开始时间”列将被填写,当用户注销结束时间将被填写并计算总分钟数时。每次用户登录时都会插入新行

我正在尝试显示每一天花费的总分钟数

例如

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

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

但是在我的情况下,将12 -2 -2019(4AM)到13 -2-2019(3.59AM)视为一天

从后端进行编码的方式是,如果用户从(13-2-2019)(2am)登录到(13-2-2019)(6AM)..它将在数据库中存储两行。 如下所示:-

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

在上面的示例中,第一行的最低消费应为12-2-2019 Date。为此,我使用了如下的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 :(得分:1)

您是否尝试过将start_time从组中删除(也可能从选择中删除),而只是按驱动程序ID进行分组(或者不按任何内容进行分组,因为驱动程序ID已限于单值)?

由于您还限制了可以将开始时间返回到单个“天”(由您定义)的时间,因此它应该只返回开始时间在允许范围内的所有行,并对所有行的总和求和这些行。而且,由于您已经知道“日期”,因此您实际上不需要输出它。

尝试一下:

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'

当然,如果您需要更通用的解决方案(例如,一次可以显示多个“天”),那么效果就不太好-您必须找到一种方法来按自定义时间范围分组-但这为您提供了一个起点。

答案 1 :(得分:0)

找到了解决方案:- 从日期时间值和组中减去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";