ORCALE中父子表联表查询and去重and筛选出子表中对应的最新一条数据

首先讲一下场景,有一个父表订单表,子表货物表。

一个订单下会有多条货物信息。

我们要根据一个船名航次筛选出X个订单,假定为6个。

然后每个订单下又有三个货物,最终要拿到6个订单中最新的货物数据,也就是6条数据。

SQL语句如下

SELECT 
* FROM
(
SELECT
G.字段1,G.字段2,G.字段3,
row_number() over( partition by I.订单名称 order by NVL(G.最后编辑时间,G.新增时间) DESC) RN
FROM 货物表 G
LEFT JOIN 订单表 I
ON 关联关系
WHERE 筛选条件  --比如i.isdel='0'
) R 
WHERE R.RN=1

就是先把根据订单名称分组且按最后时间desc排序的数据加上序号,每个订单名称对应的排序号都是123,然后再在最外层筛选出排序号等于1的数据,就拿到最新的了。

row_number()就是加序号。

重点就是 over(partition by ) 后跟什么就根据什么字段分组,order by就是排序  正序asc  倒序desc  新手不要写错成dasc....

nvl的用法可能会有新手不懂,就是在前边值为空的时候取后边的值,非常适用于此类场景。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值