求DBA大神,有个SQL卡主了~

Mr_K 发布于 2019/03/18 15:53
阅读 1K+
收藏 0

 

如图:
如果出现连续三条及三条一样(Longitude和Latitude一样)的数据的时候,只取开始出现和最后出现的数据。

比如:Id为208到225是一样的,则取208和225这两条、

id为241到245是一样的,则取241和245这两条。

其他的不变。

加载中
1
zsh9527
zsh9527

修改入库逻辑:

1.sql语句添加新字段pre_id,(模拟自增id,从文件读取)

2.insert新数据时,和前一条数据的Longitude和Latitude字段对比,相同则pre_id取前一条数据pre_id(或取文件当前id),不同则文件id+1,取文件id

3.查询,group by  3个字段 having>=3

0
gitOpen_1
gitOpen_1

通过业务代码实现不行吗?

 

 

0
信吉安

重复项必定连续吗,是否存在重复,但是不连续的情况

信吉安
回复 @Mr_K : id是自增主键吗,还是只能根据创建时间来判断数据是否连续
Mr_K
Mr_K
会有重复出现的。 比如Id为1到4的时候,Long和Lat都为1,2...在5到8的时候Long和Lat都为1,3...在9到12的时候Long和Lat为2,4...在13到18的时候Long和Lat又为1,2....那么我要的数据结果则是: 1,2 1,3 2,4 1,2 .....
0
caiw
caiw

一个最简单的办法是使用 group by Longitude,Latitude  

sql:

select Longitude,Latitude, min(CreateTime),max(CreateTime) from table group by Longitude,Latitude

信吉安
连续的,大于等于三条,你怎么办
0
昵称非法已被屏蔽

为什么不用代码来实现。

昵称非法已被屏蔽
T-SQL 有窗口函数,实现这个比较容易
0
徐迎龙
徐迎龙

distinct 后面可以跟上多个字段

0
求是科技
求是科技

你这个数据量有点大,采样精度是不是太高了?

只有实时的取出数据,在代码层面进行过滤,存入到另一张表(假设table_a)。业务取数据的时候就从table_a中取。

0
jolphin
jolphin
select tt.*,
       row_number() over(partition by tt.longitude, tt.latitude, (tt.sn-tt.rn) order by tt.id) sn
  from (select t.*, 
               row_number() over(order by t.createtime, t.id) sn,
               row_number() over(partition by t.longitude, t.latitude order by t.createtime) rn
          from tab t) tt
 --where tt.sn <= 2
 order by tt.createtime;

没有sql server环境可以运行, 你可以试试看看.

select *
from (select tt.*,
             count(*) over(partition by tt.longitude, tt.latitude, (tt.sn-tt.rn)) max_sn,
             row_number() over(partition by tt.longitude, tt.latitude, (tt.sn-tt.rn) order by tt.id) cur_sn
        from (select t.*, 
                     row_number() over(order by t.createtime, t.id) sn,
                     row_number() over(partition by t.longitude, t.latitude order by t.createtime) rn
                from tab t) tt) ttt
where ttt.cur_sn = 1
   or ttt.max_sn < 3 
   or ttt.max_sn = ttt.cur_sn
order by ttt.createtime;

 

0
xd03122049
xd03122049

1. 问的问题没有描述业务场景,比如是否分库分表,如果数据量小看这个采集频率和经度、维度应该不小。那么我的判断是数据库的设计不合理。

2. 在数据量的前提下,你这个需要单独构造一张表将这些数据提出来,可以每次查询时快速获取。要不你首先得做数据的聚合,聚合完后相当于一次全部数据的扫表。

3. 新的数据的插入,就是每次跟新数据时将原表数据插入一调,同时更新这个新表的数据即可解决。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部