不试一下怎么知道我不行? 2022-03-13 23:12 采纳率: 91.3%
浏览 457
已结题

SQL:left join取右表符合条件的第一条结果怎么操作?

需求:想要查询一条休假记录Record所对应的休假额度Ration里结束时间最早的那个休假额度。对应的条件是:Record的timefrom和timeto要在Ration的timefrom和timeto之间。

举个例子:3/12-3/13我请了两天假,额度A(2022/1/1-2022/6/1)、额度B(2022/3/1-2022/9/1)按时间来看都能当作我这次休假所用的额度,但是扣除额度只要从一个额度中扣除就好了,不能重复扣除,这里默认从较早结束的额度里扣除(就是额度A)

补充:因为这个需求只是我完成整个sql的一小部分,我整体是想要查找好多条record对应他们应扣除的额度,聚合求sum的,所以解决方案不能是说拿到结果集以后直接取第一条这样子解决,我需要在聚合前就能拿到确定的那一条额度。

select * from Record r
left join Ration ra on r.TimeFrom>=ra.RationTimeFrom and r.TimeTo<=ra.RationTimeTo
这样子会有很多一条record对应多条ration的情况。然后我卡在这写不下去了。

求大lao帮忙看看sql怎么写!谢谢!蛮急的!

  • 写回答

3条回答 默认 最新

  • 三千烦恼丝xzh 2022-03-14 00:28
    关注

    分区发号套一层子查询取top1,需要数据库支持开窗函数

    select * from (
    select * , row_number() over(partition by r.主键 order by r.TimeFrom) rn from Record r
    left join Ration ra on r.TimeFrom>=ra.RationTimeFrom and r.TimeTo<=ra.RationTimeTo
    ) tmp where tmp.rn = 1
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月13日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效