当前位置: 代码迷 >> Oracle开发 >> 求按业务数据分组的sql语句(急),该怎么处理
  详细解决方案

求按业务数据分组的sql语句(急),该怎么处理

热度:115   发布时间:2016-04-24 06:42:44.0
求按业务数据分组的sql语句(急)
业务表结构如下:
-- Create table
create table dis_table 
(
  rec_id       VARCHAR2(36) not null,
  deviceid    NUMBER(9),  
  jldate     NUMBER(38),
  jlstime     NUMBER(38),
  distance     number(38)
  )
---业务数据
            rec_id              deviceid  jldate       jlstime distance 
1 20140509170323459030 4005 20140509 170333 0
2 20140509170357463108 4005 20140509 170403 0
3 20140509170423466333 4005 20140509 170433 0
4 20140509170454470072 4005 20140509 170453 1
5 20140509170524473817 4005 20140509 170523 2
6 20140509170554477478 4005 20140509 170553 3
7 20140509170624481175 4005 20140509 170623 4
8 20140509170754492398 4005 20140509 170753 0
9 20140509170824496074 4005 20140509 170823 1
10 20140509170854499739 4005 20140509 170853 2
11 20140509170924403314 4005 20140509 170923 3
12 20140509192037456692 4005 20140509 192035 4
13 20140509192107460321 4005 20140509 192105 5
14 20140509192137463964 4005 20140509 192135 6
15 20140509192207467585 4005 20140509 192205 0
16 20140509192237471151 4005 20140509 192235 1
17 20140509192506489252 4005 20140509 192505 6
18 20140509192536492849 4005 20140509 192535 8
19 20140509192606496471 4005 20140509 192605 11
20 20140509192636400061 4005 20140509 192635 13

-----需要按业务数据进行分组,即每下一条业务数据出现0时,即将之前的数据视为一组
            rec_id              deviceid  jldate       jlstime distance  gruop_Id 
1 20140509170323459030 4005 20140509 170333 0           1
2 20140509170357463108 4005 20140509 170403 0           2
3 20140509170423466333 4005 20140509 170433 0           3
4 20140509170454470072 4005 20140509 170453 1           3
5 20140509170524473817 4005 20140509 170523 2           3  
6 20140509170554477478 4005 20140509 170553 3           3
7 20140509170624481175 4005 20140509 170623 4           3
8 20140509170754492398 4005 20140509 170753 0           4
9 20140509170824496074 4005 20140509 170823 1           4
10 20140509170854499739 4005 20140509 170853 2           4
11 20140509170924403314 4005 20140509 170923 3           4
12 20140509192037456692 4005 20140509 192035 4           4
13 20140509192107460321 4005 20140509 192105 5           4
14 20140509192137463964 4005 20140509 192135 6           4
15 20140509192207467585 4005 20140509 192205 0           5 
16 20140509192237471151 4005 20140509 192235 1           5
17 20140509192506489252 4005 20140509 192505 6           5
18 20140509192536492849 4005 20140509 192535 8           5
19 20140509192606496471 4005 20140509 192605 11          5
20 20140509192636400061 4005 20140509 192635 13          5

---最终需求是
 select sum(dis) from  select gruop_Id,  max(distance) - min(distance) dis group by  gruop_Id)

即:将每组的最大值减去最小值,得出每组值之差(其实就是每组max(distance),因为都是从0开始分组的)。然后再将每组之差进行累加,得到业务数据中累计distance 



烦请,哪位大侠帮我写个sql语句实现上述业务需求,不胜感激! 目前本人不知道如何按照业务数据来进行分组。
  
------解决方案--------------------
引用:
业务表结构如下:
-- Create table
create table dis_table 
(
  rec_id       VARCHAR2(36) not null,
  deviceid    NUMBER(9),  
  jldate     NUMBER(38),
  jlstime     NUMBER(38),
  distance     number(38)
  )
---业务数据
            rec_id              deviceid  jldate       jlstime distance 
1 20140509170323459030 4005 20140509 170333 0
2 20140509170357463108 4005 20140509 170403 0
3 20140509170423466333 4005 20140509 170433 0
4 20140509170454470072 4005 20140509 170453 1
5 20140509170524473817 4005 20140509 170523 2
6 20140509170554477478 4005 20140509 170553 3
  相关解决方案