微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于 datetime2 谓词连接表

如何解决基于 datetime2 谓词连接表

如何在 TripID 上连接表 A 和 B(见图片)以及 TimeTriggered 在 SegmentStart 和 SegmentEnd 之间的位置?

我可以试试:

FROM TableA A
INNER JOIN TableB B
ON A.TripID = B.TripID
AND B.TimeTriggered BETWEEN A.SegmentStart AND A.SegmentEnd

然而,由于 BETWEEN 在两端都包含在内,它会将警报 B 加入到第 1 段和第 2 段。

我可以尝试 >= AND AND

如何在不导致某些笛卡尔积的情况下捕获所有 3 个警报?

理想情况下,解决方案也是保留索引。

[表格对象]

1

解决方法

您可以使用 apply 任意选择其中之一:

SELECT . . . 
FROM TableA A CROSS APPLY
     (SELECT TOP (1) B.*
      FROM TableB B
      WHERE A.TripID = B.TripID AND
            B.TimeTriggered BETWEEN A.SegmentStart AND A.SegmentEnd
     ) B;

但是,您应该修复您的数据。通常对于日期时间值和范围,第一个值是范围的一部分,第二个不是。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。