Sql 如何从相同的表中查找重叠的日期范围(多个重叠)
存在具有数据范围的用户数据 我正在尝试使用查询更新标志部分。若同一用户id组重叠任何一天范围,则应在标志部分显示重叠 你能告诉我如何标记这些重叠数据吗 谢谢 要获得“重叠”,请使用“存在”: 在更新中,这看起来像:Sql 如何从相同的表中查找重叠的日期范围(多个重叠),sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,存在具有数据范围的用户数据 我正在尝试使用查询更新标志部分。若同一用户id组重叠任何一天范围,则应在标志部分显示重叠 你能告诉我如何标记这些重叠数据吗 谢谢 要获得“重叠”,请使用“存在”: 在更新中,这看起来像: update t set flag = 'overlaps' where exists (select 1 from t t2 where t2.registereddate < t.te
update t
set flag = 'overlaps'
where exists (select 1
from t t2
where t2.registereddate < t.termdate and
t2.termdate > t.registereddate
);
在SQL Server中,获取字符串字段中重叠记录的列表要复杂得多。获取重叠的成对列表非常容易。要获取“重叠”,请使用:
在更新中,这看起来像:
update t
set flag = 'overlaps'
where exists (select 1
from t t2
where t2.registereddate < t.termdate and
t2.termdate > t.registereddate
);
在SQL Server中,获取字符串字段中重叠记录的列表要复杂得多。获得重叠的成对列表非常容易。您还可以将表内部连接到表本身,并以这种方式比较日期
SELECT *
FROM [Table] t1
INNER JOIN [Table] t2
ON t1.ID <> t2.ID
AND t1.UserId = t2.UserId
AND ((t1.RegisterDate BETWEEN t2.RegisterDate AND t2.TermDate) OR (t1.TermDate BETWEEN t2.RegisterDate AND t2.TermDate))
虽然你最终拥有的领域越多,这就变得越复杂
看到这个您还可以将表内部连接到自身,并以这种方式比较日期
SELECT *
FROM [Table] t1
INNER JOIN [Table] t2
ON t1.ID <> t2.ID
AND t1.UserId = t2.UserId
AND ((t1.RegisterDate BETWEEN t2.RegisterDate AND t2.TermDate) OR (t1.TermDate BETWEEN t2.RegisterDate AND t2.TermDate))
虽然你最终拥有的领域越多,这就变得越复杂
见此请以表格形式提供样本数据和预期结果是否应该说只是重叠?如果有超过一行的重叠怎么办?请以表格格式提供示例数据和预期结果,是否应该说只是重叠?如果有多行的重叠怎么办?