SQL按时间分组统计还得消除经纬度的误差,写不出来了

dovefay 2011-06-23 02:51:43
需求是把一天的所有停车地点都显示出来,并给出开始时间,结束时间,一共停了多少小时多少分。

我的算法是想,先分组,如果发现上一条记条和下一条记录经纬度都差很多了,那么它们就不是一组了。算之前经纬度差不多的那组,得出平均经纬度+开始时间+结束时间+共计停车时间。

GPS表中结构如下,字段都是以char存储的,那个秒数是从插入记录的时间到2007年1月1日的总秒数,可以用来算时间

CARID, 秒数,DATE, TIME, SPEED,laititude, longtitude


一开始,我是select * from GPS where cardid='f130' and date='20110622' and speed='0' 可以调出这一天的所有停车记录。

但是发现有些问题,就算车不动的话,每次发回的来的经度和纬度数据都一点点的误差,这个误差只有小数点后3,4位,所以必须用平均数给他清掉,只显示一个地点。

然后我用了substring来对比出相对的经纬度,我是用如果小数点后一位都相同的话,那么就算是没动。
select substring(lattitude,0,6)+substring(longtitude,0,7) as position,* from GPS
where cardid='f130' and date='20110622' and speed='0'



我是想,这样是可以多出一列POSITION,这个POSTION可以用来对比是不是同一个地点

然后采用子查询,

select count(*),position,avg(convert(float,latitude)),avg(convert(float,longtitude)) 
from(
select substring(lattitude,0,6)+substring(longtitude,0,7) as position,* from GPS
where cardid='f130' and date='20110622' and speed='0'
)as StopGPS
group by position



然后我就写不出来了,还差开始时间,结束时间,停车时间。而且我这样的写法有一个bug,就是万一车在过了一段时间后,又停到了同一个位置,得是算两个点的,但按上面的写法,停车点只会有一个。


我也不知道我思路对不对,所以请大家看一下,如何来处理这个业务。
...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-06-23
  • 打赏
  • 举报
回复
多长时间一条记录?
GameWong 2011-06-23
  • 打赏
  • 举报
回复
【需求是把一天的所有停车地点都显示出来,并给出开始时间,结束时间,一共停了多少小时多少分】
觉得这个需求是不需要group by的
GameWong 2011-06-23
  • 打赏
  • 举报
回复
返回的数据是根据什么条件返回的?
--小F-- 2011-06-23
  • 打赏
  • 举报
回复
两个点的问题可以用count(distinct *) 解决

xuexiaodong2009 2011-06-23
  • 打赏
  • 举报
回复
GPS 本身就有误差,几十米的,不知道你做什么用,

忽略掉小数点后3,4位,估计误差就更大了,

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧