【SQL语法之窗口函数:一对多关系,对应关系取值】

  • 一对多关系取多条
公用表达式:为每一个对应关系的数据创建一个序号
WITH RankedChildren AS (
    SELECT
        hwr.resourceid,hwr.company,hwr.jobtitle,hwr.startdate,hwr.enddate,
        # 窗口函数
        ROW_NUMBER() OVER (
            PARTITION BY hwr.resourceid -- 关联关系id及分组id
            ORDER BY hwr.startdate DESC -- 需要排序的字段
        ) AS rn
    FROM
        HrmWorkResume hwr 
    INNER JOIN HrmResource hr ON hwr.resourceid = hr.id
)
SELECT
     rc.resourceid,rc.company,rc.jobtitle,rc.startdate,rc.enddate
FROM
    RankedChildren rc
WHERE
    rc.rn <= 3 -- 取对应关系的前三条
ORDER BY 
	rc.resourceid, rc.rn;  -- 取完之后的数据排序	
  • 一对多关系取一条
SELECT 
DISTINCT  hwr.resourceid id,
FIRST_VALUE(hwr.company)OVER(PARTITION BY hwr.resourceid ORDER BY hwr.enddate DESC) company,
FIRST_VALUE(hwr.jobtitle)OVER(PARTITION BY hwr.resourceid ORDER BY hwr.enddate DESC) jobtitle,
FIRST_VALUE(hwr.startdate)OVER(PARTITION BY hwr.resourceid ORDER BY hwr.enddate DESC) startdate,
FIRST_VALUE(hwr.enddate)OVER(PARTITION BY hwr.resourceid ORDER BY hwr.enddate DESC) enddate FROM  HrmWorkResume hwr ORDER BY hwr.resourceid
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值