Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从相同的表中查找重叠的日期范围(多个重叠)_Sql_Sql Server_Database_Tsql - Fatal编程技术网

Sql 如何从相同的表中查找重叠的日期范围(多个重叠)

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

存在具有数据范围的用户数据

我正在尝试使用查询更新标志部分。若同一用户id组重叠任何一天范围,则应在标志部分显示重叠

你能告诉我如何标记这些重叠数据吗 谢谢

要获得“重叠”,请使用“存在”:

在更新中,这看起来像:

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))
虽然你最终拥有的领域越多,这就变得越复杂


见此

请以表格形式提供样本数据和预期结果是否应该说只是重叠?如果有超过一行的重叠怎么办?请以表格格式提供示例数据和预期结果,是否应该说只是重叠?如果有多行的重叠怎么办?