所使用的表的具体结构如下图所示
在这里插入图片描述

Table中主键是(plateNumber+currentTime

要实现的查询是:

给定车牌号和查询的时间区间,查询给定的时间区间内所包含记录的currentTime的差值,并计算AverageSpeed和该差值的乘积,求这段时间内的最高速度(HighestSpeed),并按照type值得不同进行划分。–>(type值只有0和1两个值)

主要思路是,首先能够得出的是相同type类型下同一个车牌号(也即同一车辆)在给定的时间区间内的currentTime的差值,比如按照currentTime排序号,相邻两条记录currentTime的差值,得出这个以后,其余的都可以通过聚合函数得出。

我们以车牌号为京A111111为例,设计如下图所示的测试用例。
在这里插入图片描述

可以看到车牌号为京A111111的车辆总共有6条记录,其中type为0的有两条,type为1的有4条,

我们首先计算时间的差值,sql语句书写如下:

SELECT a.platenumber, 
       a.currenttime, 
       a.type, 
       a.averagespeed, 
       a.highestspeed, 
       currenttime - (SELECT currenttime 
                      FROM   carmultispeedinfo 
                      WHERE  platenumber = a.platenumber 
                             AND type = a.type 
                             AND currenttime < a.currenttime 
                      ORDER  BY currenttime DESC 
                      LIMIT  1)AS timediff 
FROM   carmultispeedinfo a 

通过navicat可以看到如下图所示的查询结果:

通过核查timediff的值是正确的,这样之后就可以在这个基础上添加内容了。

完整的sql语句如下:

SELECT Sum(aa.averagespeed * aa.timediff) AS milesdiff, 
       Max(aa.highestspeed)               AS HighestSpeed, 
       Sum(aa.timediff)                   AS timediff, 
       aa.type 
FROM   (SELECT a.platenumber, 
               a.currenttime, 
               a.type, 
               a.averagespeed, 
               a.highestspeed, 
               currenttime - (SELECT currenttime 
                              FROM   carmultispeedinfo 
                              WHERE  platenumber = a.platenumber 
                                     AND type = a.type 
                                     AND currenttime < a.currenttime 
                              ORDER  BY currenttime DESC 
                              LIMIT  1) AS timediff 
        FROM   carmultispeedinfo a)aa 
WHERE  aa.platenumber = '京A111111' 
       AND aa.currenttime >= 1521790124670 
       AND aa.currenttime <= 1521790125685 
GROUP  BY aa.type 

显示结果如下:
在这里插入图片描述

经过核对,是我们想要得出的结果。之后将sql对应替换到mybatismapper文件中就可以了。<记录一下,备忘>将来有更深入的理解之后会继续更新,谢谢大家。


本文转载:CSDN博客