当前位置:编程学习 > C#/ASP.NET >>

过滤冗余数据,请高手进来看下

功能说明:车辆行驶时,会把路线坐标定时存储到数据库,即使不行驶也会把坐标存储到数据库,我现在需要
          做的是,过滤出行驶时的坐标,请高手指点下 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 的用法。 --------------------编程问答--------------------
引用 2 楼 huainian23 的回复:
建议楼主多看一下 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.纬度

这个不知道好用不 --------------------编程问答--------------------
引用 8 楼 tanglongtyler 的回复:
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.时间)
--------------------编程问答--------------------
引用 9 楼 CW_90 的回复:
引用 8 楼 tanglongtyler 的回复: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 如果……


你不表示哪个是往,哪个是返,谁知道怎么取? --------------------编程问答--------------------
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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,