不试一下怎么知道我不行? 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 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来