需求:想要查询一条休假记录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怎么写!谢谢!蛮急的!
分区发号套一层子查询取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
利用开窗函数,做一个辅助列,看每一条timeto是不是等于当前分组最小值,是的话打标。然后用where筛选所有打标了timeto是最小值的记录。如有不懂再问,望采纳!
第一次接触开窗函数!!!!我学到好多!!!!!!!!!!!!!!!!!!!!好开心!!!!!!!!!!!!!!!!!!