现在我有个表 table1 ,
记录一个月内,每个号码的漫游地
假设针对个号码每天产生一条记录
call_num address call_time
号码 地域 时间
132 深圳 20080101
123 北京 20080101
123 北京 20080102
123 北京 20080102
155 广州 20080112
132 上海 20080112
145 上海 20080114
145 上海 20080114
123 广州 20080114
132 广州 20080114
155 广州 20080114
155 广州 20080117
123 广州 20080117
132 北京 20080118
123 深圳 20080118
123 深圳 20080118
123 北京 20080122
132 北京 20080122
155 上海 20080122
155 上海 20080123
155 上海 20080124
155 上海 20080130
155 上海 20080131
145 苏州 20080131
123 广州 20080131
现在要求每个号码在每月最后的出现地点和该号码在该月早到达该地的时间
(假设一个号码一个最多在两个地方出现)
例如号码 155 本月的最后一天是上海,并且是在22进入上海的那么可能的数据就是
call_num last_area last_area_time
号码 本月最后出现地点 本月到达最新漫游地的起始时间
155 上海 20080122请问这个 sql 如何构造啊
记录一个月内,每个号码的漫游地
假设针对个号码每天产生一条记录
call_num address call_time
号码 地域 时间
132 深圳 20080101
123 北京 20080101
123 北京 20080102
123 北京 20080102
155 广州 20080112
132 上海 20080112
145 上海 20080114
145 上海 20080114
123 广州 20080114
132 广州 20080114
155 广州 20080114
155 广州 20080117
123 广州 20080117
132 北京 20080118
123 深圳 20080118
123 深圳 20080118
123 北京 20080122
132 北京 20080122
155 上海 20080122
155 上海 20080123
155 上海 20080124
155 上海 20080130
155 上海 20080131
145 苏州 20080131
123 广州 20080131
现在要求每个号码在每月最后的出现地点和该号码在该月早到达该地的时间
(假设一个号码一个最多在两个地方出现)
例如号码 155 本月的最后一天是上海,并且是在22进入上海的那么可能的数据就是
call_num last_area last_area_time
号码 本月最后出现地点 本月到达最新漫游地的起始时间
155 上海 20080122请问这个 sql 如何构造啊
select *
from (select t.*, row_number() over(partition by call_num order by call_time desc) rn from tbc_call t)
where rn = 1)
select t.call_num, t.address as last_area, min(t.call_time) as last_area_time
from tbc_call t
inner join last_area on t.call_num = last_area.call_num
and t.address = last_area.address
group by t.call_num, t.address;输出结果:
155 shanghai 1/22/2008
123 guangzhou 1/14/2008
145 suzhou 1/31/2008
132 beijing 1/18/2008
with 是oracle 中sql吗?
什么意思啊?
你把with中间的sql拿出来用括号括起来替换到下面引用last_area的地方再起个别名叫last_area也同样好用,
你上网搜下oracle with as就知道了