Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mysql计算车辆在客户处的进出时间,为每个客户计算多个站点和条目_Mysql_Max_Min - Fatal编程技术网

使用mysql计算车辆在客户处的进出时间,为每个客户计算多个站点和条目

使用mysql计算车辆在客户处的进出时间,为每个客户计算多个站点和条目,mysql,max,min,Mysql,Max,Min,我有一个mysql表,其中包含如下截图所示的数据 我的需求是生成一个mysql查询,该查询将显示每个客户的进出时间。 我遇到的问题是,我不能使用min或max,因为车辆可能在一段时间内访问了同一客户两三次 所以我想要的结果是: Vehicle: RB10 Customer: Hulamin In: 10:19 out: 10:35 Time Taken: 16 min In: 11:14 out: 11:29 Time Taken: 15 min ave time taken: 15.5 min

我有一个mysql表,其中包含如下截图所示的数据

我的需求是生成一个mysql查询,该查询将显示每个客户的进出时间。 我遇到的问题是,我不能使用min或max,因为车辆可能在一段时间内访问了同一客户两三次

所以我想要的结果是:

Vehicle: RB10
Customer: Hulamin
In: 10:19
out: 10:35
Time Taken: 16 min
In: 11:14
out: 11:29
Time Taken: 15 min
ave time taken: 15.5 min
根据需要,其他每个场地和车辆也应如此

我如何告诉mysql在相应的超时和报告之前获取最小的时间


非常感谢您的帮助。

您可以使用SQL变量来帮助控制地址何时更改,即使更改多次。如果没有现成的MySQL,我将采用下面的方法。从一个内部查询开始,该查询根据车辆和/或地址的变化标记“GroupSeq”。按日期/时间顺序保存订单。每次对@lastGroup进行测试后,要么单独进行测试,要么将1添加到序列中,然后更新@lastAddress和@lastVehicle,作为将下一条记录选择到结果集中进行比较的基础

根据您的示例,每个客户的结果将是(所有这些车辆都是相同的,因此不会重复该列的显示) 地址GroupSeq 胡拉明1 SACD 2 UL 3 NP 4 胡拉明5 SACD 6

然后,您可以根据分配的GroupSeq正确执行最小/最大值

select
      PreQuery.Vehicle,
      PreQuery.Address,
      PreQuery.GroupSeq,
      MIN( PreQuery.`DateTime` ) as InTime,
      MAX( PreQuery.`DateTime` ) as OutTime
   from
      ( select
              YT.Vehicle,
              YT.Address,
              YT.`DateTime`,
              YT.Direction,
              @lastGroup := @lastGroup + if( @lastAddress = YT.Address 
                                         AND @lastVehicle = YT.Vehicle, 0, 1 ) as GroupSeq,
              @lastVehicle := YT.Vehicle as justVarVehicleChange,
              @lastAddress := YT.Address as justVarAddressChange
           from
              YourTable YT,
              ( select @lastVehicle := '',
                       @lastAddress := '',
                       @lastGroup := 0 ) SQLVars
           order by
              YT.`DateTime` ) PreQuery
   Group By
      PreQuery.Vehicle,
      PreQuery.Address,
      PreQuery.GroupSeq
上述情况会导致类似的结果

Vehicle   Address   GroupSeq   InTime   OutTime
RB10      Hulamin   1          10:19    10:35
RB10      SACD      2          10:37    10:40
RB10      UL        3          10:41    11:06
RB10      NP        4          11:07    11:14
RB10      Hulamin   5          11:14    11:28
RB10      SACD      6          11:29    12:21
现在,上面的示例实际上并没有计算每次输入输出所花费的总时间,也没有计算每辆车/客户的平均处理时间,但您可以在理解并获得这部分内容后添加这些计算


请注意,这是基于按日期/时间显示的自然顺序。看起来,一笔交易从头到尾可能有许多“输入”,但在进入下一个客户地址之前,总是以“输出”结束。如果这是一个不正确的假设,显然需要进行修改。

也许你应该在感谢Drapp上问这个问题,非常感谢你为这个答案所做的努力。我需要一些时间来消化它,并从中吸取教训,所以到时候会有反馈。再次非常感谢,我不知道从哪里开始。把@variables想象成一个内联程序。:=是赋值,结果存储在该行的最后一列中,但在下一个循环中保留它们的值。因此,很像一个按顺序排列的值循环,它们每行都有标记。在外部查询之前单独运行内部查询以查看所有值。然后,应用到外部查询以查看最终结果。再次感谢DRapp,感谢您的时间。我一定会实践这一点。干杯,@RyanSmith,如果你想看到一个真正能让你头疼的。。。查看指向此S/O线程的链接,其中一个看起来很简单:-)我将从录制这一个开始,然后再录制那一个。