Oracle分段查询

逸珠 2019-04-30 03:30:54

如图,我当前选中的行的I_qty都是是2,求出我所选中的所有行的最大时间-最小时间的差。(只要I_qty连续多行一样就要求时间差),希望各位大佬帮帮忙!
...全文
425 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
逸珠 2019-05-04
  • 打赏
  • 举报
回复
自己解决了,分享下解决方法,解决方法如下:select a.*,dense_rank() over(order by rownumber - rownums)
from (
select a.*,rownum as rownums from (
select a.line_name,a.model_name,a.virtual_id,max(a.in_station_time) maxtime,min(a.in_station_time) mintime,count(*) as I_qty,row_number()over(order by line_name,min(a.in_station_time) asc) as rownumber from (
select a.line_name,b.model_name,c.virtual_id,a.in_station_time from sfism4.r_wip_log_t a left join sfism4.r_wip_tracking_t b on a.serial_number=b.serial_number
left join sfism4.r_sn_mapping_group_t c on b.serial_number=c.serial_number
where (a.emp_no <>'IN_STOCK' and a.emp_no<>'OUT_STOCK' or a.emp_no is null) and a.group_name ='SMTC'
and a.in_station_time>=to_date('2019/4/26 11:22:37','yyyy-mm-dd hh24:mi:ss')
and a.in_station_time<=to_date('2019/4/26 17:22:36','yyyy-mm-dd hh24:mi:ss')
and c.virtual_id is not null
order by a.line_name,a.in_station_time) a
group by a.line_name,a.model_name,a.virtual_id
order by a.line_name)a where a.I_Qty>1 order by line_name,mintime
) a
以上是SQL语句,最关键的代码在于先根据row_number()over(order by line_name,min(a.in_station_time) asc)来增加一个自增的数字列,然后在sql外面套一层select查询出rownum,再套一个select增加一个列dense_rank() over(order by rownumber - rownums) ,就可以区分出来每个连续的区间。
fly_zq 2019-05-01
  • 打赏
  • 举报
回复
good 非常好
逸珠 2019-04-30
  • 打赏
  • 举报
回复
大哥麻烦你说的详细点么
逸珠 2019-04-30
  • 打赏
  • 举报
回复
引用 1 楼 nayi_224 的回复:
见过好多人问这个了,就是先将连续的I_qty化为一组(可以用lead+sum),然后每组内用分析函数求。
大哥可以详细解释下吗
nayi_224 2019-04-30
  • 打赏
  • 举报
回复
见过好多人问这个了,就是先将连续的I_qty化为一组(可以用lead+sum),然后每组内用分析函数求。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧