SQL查询时间范围重叠数据,以及CTE递归查询效率验证

本文介绍了如何使用SQL查询时间范围重叠的数据,并通过比较两种不同方式(包括CTE递归查询)来验证查询效率。结论显示,尽管CTE递归查询写法简洁,但其效率接近于常规的联合查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

关于单据重复,一直都是个头疼的问题,因为有可能同一个人单据类型相同或者不同情况下,时间存在重叠。如何查重呢?

我能想到的就是取出来这些数据,然后利用自身进行对比,但是同时利用Id排除自身

  • 方式一

              SELECT  a.EmpId ,
            a.Id AS 单据ID1 ,
            b.Id AS 单据ID2,
		 CASE WHEN
		 a.FLowType =4 THEN '请假单'
		 WHEN a.FLowType =16 THEN '外勤'
		 WHEN a.FLowType = 2 THEN '加班'
		  end AS 单据类型,
		  a.OrderType  AS 类型,
			a.CreateUser AS 提交人,
			e.EmpNo AS 工号,
			a.BeginDateTime AS 单据1开始,
			a.EndDateTime AS 单据1结束,
			b.beginDateTime AS 单据2开始,
			b.EndDateTime AS 单据2结束,
			a.OrderNo AS 单据一单号,
			b.OrderNo AS 单据二单号
    FROM    ( SELECT    fd.EmpId ,
                        f.Id ,
                        MAX(f.BeginDateTime) AS BeginDateTime ,
                        MAX(f.EndDateTime) AS EndDateTime ,
                      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值