SQL Server 2008中如何按时间范围关联Table A与Table B?
SQL Server 2008 时间区间关联表的实现方法
表结构与数据
Table A
Start End --------------------------------------- 2022-04-29 15:00:00 2022-04-29 15:30:00 2022-04-29 15:30:00 2022-04-29 17:00:00 2022-04-29 17:00:00 2022-04-29 18:00:00 2022-04-29 18:00:00 2022-04-29 18:30:00 2022-04-29 18:30:00 2022-04-29 20:00:00
Table B
Start Value ----------------------- 2022-04-29 12:00:00 100 2022-04-29 15:30:00 200 2022-04-29 16:00:00 300 2022-04-29 18:00:00 400 2022-04-29 21:00:00 500
实现SQL语句
要保留Table A的所有行,同时匹配Table B中时间落在A区间内的记录,使用LEFT JOIN结合时间区间条件即可:
SELECT a.Start, a.End, b.Value FROM TableA a LEFT JOIN TableB b ON b.Start >= a.Start AND b.Start < a.End
结果说明
执行后会得到符合预期的结果,无匹配的行Value列显示NULL(对应示例中的NaN,SQL Server中用NULL表示空值):
Start End Value -------------------------------------------- 2022-04-29 15:00:00 2022-04-29 15:30:00 200 2022-04-29 15:30:00 2022-04-29 17:00:00 300 2022-04-29 17:00:00 2022-04-29 18:00:00 NULL 2022-04-29 18:00:00 2022-04-29 18:30:00 400 2022-04-29 18:30:00 2022-04-29 20:00:00 NULL
补充说明
LEFT JOIN确保Table A的所有行都被保留,即使Table B中没有匹配记录。- 时间条件
b.Start >= a.Start AND b.Start < a.End避免了重复匹配(比如示例中2022-04-29 15:30:00仅匹配到Table A的第二行)。
内容的提问来源于stack exchange,提问作者Starbucks
相关产品推荐
相关产品推荐

