过滤冗余数据,请高手进来看下
功能说明:车辆行驶时,会把路线坐标定时存储到数据库,即使不行驶也会把坐标存储到数据库,我现在需要做的是,过滤出行驶时的坐标,请高手指点下 Oracle或.net都可以使用 住:数据有上百条以上
字段: 时间 经度 纬度
2013/03/17 05:00:00 29.61 114.46
2013/03/17 06:00:00 30.61 115.46
2013/03/17 07:00:00 31.61 116.46
2013/03/17 08:00:00 32.61 117.46
2013/03/18 05:00:00 29.61 114.46
2013/03/18 06:00:00 30.61 115.46
2013/03/18 07:00:00 30.61 115.46
2013/03/18 08:00:00 30.61 115.46
所要结果
2013/03/17 05:00:00 29.61 114.46
2013/03/17 06:00:00 30.61 115.46
2013/03/17 07:00:00 31.61 116.46
2013/03/17 08:00:00 32.61 117.46
2013/03/18 05:00:00 29.61 114.46
2013/03/18 06:00:00 30.61 115.46
--------------------编程问答-------------------- select min(时间),经度,纬度 from table groupby 经度,纬度 --------------------编程问答-------------------- 建议楼主多看一下 GROUP BY 的用法。 --------------------编程问答-------------------- Group BY 不行的 因为有时间 我要查找的是经度和纬度连续相同时 只取出第一个坐标 --------------------编程问答-------------------- select * From tb1 t Where (x+','+y)<>(select top 1 x+','+y From tb1 WHere dDate<t.dDate Order by ddate DESC) Order by ddate --------------------编程问答-------------------- 优化一下
select * From cart t Where (x+','+y)<>isnull((select top 1 x+','+y From cart WHere dDate<t.dDate Order by ddate DESC),'') Order by ddate --------------------编程问答-------------------- --------------------编程问答-------------------- distinct --------------------编程问答-------------------- select MIN(时间), a.经度,a.纬度 from CatTime a,(select distinct 经度,纬度 from CatTime) as b
where a.经度=b.经度 and a.纬度=b.纬度 group by a.经度,a.纬度
这个不知道好用不 --------------------编程问答-------------------- 不能使用 Group by 如果车辆 往返时 坐标是一样话只能读取车辆返回的数据 读取出的数据是错误的 应该是 读取往返的2个坐标的 --------------------编程问答-------------------- 如果考虑非常特殊的情况 :刚好往返的时刻记录的坐标一样,个人认为应该要借助第三个字段才能完美解决问题(例如添加个往返字段),或者是提高坐标的精度(这个只能从概率上解决问题)。 如果不考虑往返坐标相同的情况,可以将数据写入临时表,然后循环遍历每行,如果坐标和前一行相同,则删除当前行,如果不同,则保留该行。 --------------------编程问答-------------------- 剩余的数据要删掉吗?
DELETE A--------------------编程问答--------------------
FROM 表 A
WHERE EXISTS
(SELECT 1
FROM 表
WHERE 经度 = A.经度 AND 纬度 = A.纬度 AND 时间 > A.时间)
你不表示哪个是往,哪个是返,谁知道怎么取? --------------------编程问答--------------------
DECLARE @TB TABLE(DT DATETIME NULL,LONGITUDE DECIMAL(8,2) NULL,LATITUDE DECIMAL(8,2))
INSERT INTO @TB VALUES('2013/03/17 05:00:00',29.61,114.46)
INSERT INTO @TB VALUES('2013/03/17 06:00:00',30.61,115.46)
INSERT INTO @TB VALUES('2013/03/17 07:00:00',31.61,116.46)
INSERT INTO @TB VALUES('2013/03/17 08:00:00',32.61,117.46)
INSERT INTO @TB VALUES('2013/03/18 05:00:00',29.61,114.46)
INSERT INTO @TB VALUES('2013/03/18 06:00:00',30.61,115.46)
INSERT INTO @TB VALUES('2013/03/18 07:00:00',30.61,115.46)
INSERT INTO @TB VALUES('2013/03/18 08:00:00',30.61,115.46)
;WITH MYTAB AS (SELECT ROW_NUMBER() OVER (ORDER BY DT ASC) ROWID,DT,LONGITUDE,LATITUDE FROM @TB)
SELECT * FROM MYTAB WHERE NOT EXISTS(SELECT NULL FROM MYTAB A WHERE A.ROWID + 1 = MYTAB.ROWID
AND A.LONGITUDE = MYTAB.LONGITUDE AND A.LATITUDE = MYTAB.LATITUDE)
按时间排序后,取经纬度前后不同的记录就是你要查找的数据
补充:.NET技术 , ASP.NET