【求助】这个循环该怎么写啊_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
7
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2914 | 回复: 6   主题: 【求助】这个循环该怎么写啊        下一篇 
dream007
注册用户
等级:少校
经验:1086
发帖:53
精华:0
注册:2015-7-2
状态:离线
发送短消息息给dream007 加好友    发送短消息息给dream007 发消息
发表于: IP:您无权察看 2015-8-3 17:40:37 | [全部帖] [楼主帖] 楼主

数据如:

主叫          被叫               开始时间             结束时间              时长

111           222          2015-01-01 12:00:00    2015-01-01 14:00:00       7200

111           222          2015-01-01 14:00:00    2015-01-01 16:00:00       7200

111           222          2015-01-01 16:00:00    2015-01-01 17:00:00       3600

111           222          2015-01-02 11:00:01    2015-01-02 11:01:00       59

要转成:(也就是将前三条合并)

主叫          被叫               开始时间             结束时间              时长

111           222          2015-01-01 12:00:00    2015-01-01 17:00:00       18000

111           222          2015-01-02 11:00:01    2015-01-02 11:01:00       59

说明:时长最大值为7200s,而且次数不定,前一条的结束时间为后一条的开始时间,且主被叫相同则可认为是同一条数据。这个循环要怎么写呀,谢谢大家了




赞(0)    操作        顶端 
momoda
注册用户
等级:少校
经验:1149
发帖:28
精华:0
注册:2015-7-14
状态:离线
发送短消息息给momoda 加好友    发送短消息息给momoda 发消息
发表于: IP:您无权察看 2015-8-3 17:59:16 | [全部帖] [楼主帖] 2  楼

我来给你顶一下。。。



赞(0)    操作        顶端 
momoda
注册用户
等级:少校
经验:1149
发帖:28
精华:0
注册:2015-7-14
状态:离线
发送短消息息给momoda 加好友    发送短消息息给momoda 发消息
发表于: IP:您无权察看 2015-8-3 18:02:35 | [全部帖] [楼主帖] 3  楼

select  主叫,被叫,min(开始时间) as 开始时间,max(结束时间) as 结束时间,sum(时长)as 时长
from 数据表
group by 主叫,被叫,日期截取函数(开始时间)

不说明是哪种数据库只能写这么多了。


赞(0)    操作        顶端 
i1314lovejoy
注册用户
等级:少校
经验:1234
发帖:69
精华:0
注册:2015-7-14
状态:离线
发送短消息息给i1314lovejoy 加好友    发送短消息息给i1314lovejoy 发消息
发表于: IP:您无权察看 2015-8-3 18:05:03 | [全部帖] [楼主帖] 4  楼

北京联动北方科技有限公司这种需求真TM奇葩!!!



赞(0)    操作        顶端 
jiufengdadi
注册用户
等级:新兵
经验:71
发帖:0
精华:0
注册:2015-8-3
状态:离线
发送短消息息给jiufengdadi 加好友    发送短消息息给jiufengdadi 发消息
发表于: IP:您无权察看 2015-8-3 18:06:21 | [全部帖] [楼主帖] 5  楼

该贴被jiufengdadi编辑于2015-8-3 18:08:15


赞(0)    操作        顶端 
fireworks256
注册用户
等级:少校
经验:906
发帖:39
精华:0
注册:2015-7-15
状态:离线
发送短消息息给fireworks256 加好友    发送短消息息给fireworks256 发消息
发表于: IP:您无权察看 2015-8-3 18:26:01 | [全部帖] [楼主帖] 6  楼

1、查出数据(按照“开始时间”降序),以关联数组取出,用一个数组保存三条数据的id

select * from call_log order by start_time asc limit 0,3;


2、循环数组,将3条数据进行合并成一条
for 或  foreach 都可以。

3、合并方法,主叫、被叫不变,开始时间取第一条的,结束时间取第三条的,时长的话把三条加起来的综合。
$resu="查询出来3条数据";

foreach($resu as $k=>$v){


$merger['主叫']=$v['主叫'];
$merger['被叫']=$v['被叫'];

if($k==0){
      $merger['startTime']=$v['startTime'];
}
if($k==2){
$merger['endTime']=$v['endTime'];
}
$merger['duration']+=$v['duration'];
}


4、删除数据库前两条信息,将第三条的信息改为新生成的数据。
根据id将任意两条删除,剩余那条的信息改为新生成的$merger 数组内的值即可。

注:实现语言为php,数据库方式采用mysql     即使语言或数据库不同,但大体逻辑是相似的,哪里写不好的请朋友们支持,大家一起探讨。



赞(0)    操作        顶端 
ding
版主
等级:中尉
经验:440
发帖:12
精华:0
注册:2015-6-30
状态:离线
发送短消息息给ding 加好友    发送短消息息给ding 发消息
发表于: IP:您无权察看 2015-8-4 10:24:17 | [全部帖] [楼主帖] 7  楼

我就用最简单的shel写出来

[root@ogg2 tmp]# awk 'NR<2{print;next}{if($1"\t"$2"\t"$3==s){b+=$NF;n=$5" "$6}else{print s" "k"\t"n"\t"b;s=b=0}}!s{s=sprintf("%s\t%s\t%s",$1,$2,$3);b=$NF;k=$4}END{print s" "k"\t"$5" "$6"\t"b}' 文件

主叫          被叫               开始时间             结束时间              时长

111     222     2015-01-01 12:00:00     2015-01-01 17:00:00     18000

111     222     2015-01-02 11:00:01     2015-01-02 11:01:00     59



赞(0)    操作        顶端 
总帖数
7
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论