sql - SQL:为同一表中具有重叠日期范围的单独记录创建标志
问题描述
我试图弄清楚如何创建一个布尔字段,它会告诉我两条记录何时具有重叠的日期范围。
在以下示例中,指定日期范围内的每个唯一位置/交易对手组合可以有一个合同或一个 DeliveryPoint,而不是两者都有。所以 id 1&2 应该被标记,但是 id 的 3 和 4 是可以的,因为它们不重叠,所以标记应该是“False”。
我开始进行自我加入,但在那之后,我无法理解下一步。我是否开始正确,或者解决方案完全不同?
id Location Counterparty Contract DeliveryPoint StartDate EndDate
1 New York Wal Mart Philadelphia 3/1/2019 12/31/2020
2 New York Wal Mart 123456 5/1/2019 7/31/2019
3 Toronto Target Boston 3/1/2019 5/31/2019
4 Toronto Target 456789 6/1/2019 12/31/2020
有了旗帜,我希望它看起来像
id Location Counterparty Contract DeliveryPoint StartDate EndDate Overlap
1 New York Wal Mart Philadelphia 3/1/2019 12/31/2020 TRUE
2 New York Wal Mart 123456 5/1/2019 7/31/2019 TRUE
3 Toronto Target Boston 3/1/2019 5/31/2019 FALSE
4 Toronto Target 456789 6/1/2019 12/31/2020 FALSE
解决方案
在您的插入查询中,我认为您可以创建一个子查询来搜索具有重叠日期的其他记录。请注意日期字段测试。请参阅示例:
insert into table(location, Counterparty, Overlap)
select
@location,
@Counterparty,
case when exists(select Id
from table t
where t.location = @location
and t.Counterparty = @Counterparty
and @startDate <= t.EndDate
and @endDate >= t.StartDate
) then 1 else 0 end as Overlap
推荐阅读
- c# - 在满足预期条件后执行一些操作
- azure - Azure 活动日志
- ios - Swift 5 Xcode 10.3 如何设置背景透明
- javascript - 如何生成我进入表格的 json 响应?
- java - 在 Webview 中调用 onBackPressed 方法时,它会停止缓存
- python - 如何在熊猫的同一条船上获得连续安装的最旧部分安装?
- c# - 由于简单的类变体而导致的继承/组合
- python - 如何使用 numpy.repeat 构建一个数组,其中每个元素比前一个元素高 1%?
- javascript - 如何在反应本机日历中设置多个选定的日期颜色?
- javascript - Javascript代码点击谷歌搜索栏