Sql语句实现不同记录同⼀属性列的差值计算
所使⽤的表的具体结构如下图所⽰
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.pe,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 pe
FROM
(SELECT a.plateNumber,a.pe,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
sql语句替换表中内容WHERE
aa.plateNumber = '京A111111'
AND
aa.currentTime>=1521790124670
AND
aa.currentTime<=1521790125685
GROUP BY
显⽰结果如下:
经过核对,是我们想要得出的结果。之后将sql对应替换到mybatis的mapper⽂件中就可以了。<;记录⼀下,备忘>将来有更深⼊的理解之后会继续更新,谢谢⼤家。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论