繁体   English   中英

在两个表的日期范围内加入/合并

[英]Join/Merge on date range from two tables

再会。 我有两个表,tableA 和 tableB。 我以为我拥有它,但显然我在加入时做错了。

表 A 有几个带有数据点的日期。 TableB 只有一个日期范围。

我想根据 tableA 的日期在 tableB 的日期之间合并或连接两个表。 如何根据彼此的表格日期连接表格? 非常感谢帮助。 谢谢。

询问

  SELECT o.processval, 
           u.datepar 
    FROM   @tblA o 
           LEFT JOIN @tblB u 
                  ON u.datepar >= o.dateentered 
                     AND u.datepar <= o.dateentered 

tblA数据

   processval   dateentered
0   2018-07-26 12:47:18.480
14.7514 2018-07-26 12:47:18.480
27.2616 2018-07-26 12:47:18.480
26.7243 2018-07-26 12:47:18.480
60.8281 2018-07-26 12:47:18.480
63.4687 2018-07-26 12:47:18.480
60.9732 2018-07-26 12:47:18.480
68.0573 2018-07-26 12:47:18.480
0   2018-07-26 12:47:48.213
14.7555 2018-07-26 12:47:48.213
27.2591 2018-07-26 12:47:48.213
26.7345 2018-07-26 12:47:48.213
60.8154 2018-07-26 12:47:48.213
63.4356 2018-07-26 12:47:48.213
60.9401 2018-07-26 12:47:48.213
68.1057 2018-07-26 12:47:48.213
0   2018-07-26 12:47:48.483
14.7555 2018-07-26 12:47:48.483
27.2591 2018-07-26 12:47:48.483
26.7345 2018-07-26 12:47:48.483
60.8154 2018-07-26 12:47:48.483
63.4356 2018-07-26 12:47:48.483
60.9401 2018-07-26 12:47:48.483
68.1057 2018-07-26 12:47:48.483
0   2018-07-26 12:48:18.483
21.1506 2018-07-26 12:48:18.483
27.1649 2018-07-26 12:48:18.483
27.0706 2018-07-26 12:48:18.483
61.3094 2018-07-26 12:48:18.483
64.7775 2018-07-26 12:48:18.483
61.8161 2018-07-26 12:48:18.483
70.0078 2018-07-26 12:48:18.483
0   2018-07-26 12:48:48.487
22.8971 2018-07-26 12:48:48.487
27.0859 2018-07-26 12:48:48.487
26.9688 2018-07-26 12:48:48.487
70.9347 2018-07-26 12:48:48.487
68.5385 2018-07-26 12:48:48.487
67.7925 2018-07-26 12:48:48.487
72.6892 2018-07-26 12:48:48.487
0   2018-07-26 12:49:18.487
23.5001 2018-07-26 12:49:18.487
30.5184 2018-07-26 12:49:18.487
26.9102 2018-07-26 12:49:18.487
71.5178 2018-07-26 12:49:18.487
69.906  2018-07-26 12:49:18.487
68.867  2018-07-26 12:49:18.487
84.3287 2018-07-26 12:49:18.487
0   2018-07-26 12:49:48.490
23.9836 2018-07-26 12:49:48.490
36.8819 2018-07-26 12:49:48.490
26.844  2018-07-26 12:49:48.490
73.7739 2018-07-26 12:49:48.490
71.9634 2018-07-26 12:49:48.490
71.0493 2018-07-26 12:49:48.490
93.7401 2018-07-26 12:49:48.490
0   2018-07-26 12:50:18.490
24.6327 2018-07-26 12:50:18.490
44.1773 2018-07-26 12:50:18.490
26.8567 2018-07-26 12:50:18.490
76.1497 2018-07-26 12:50:18.490
74.3621 2018-07-26 12:50:18.490
73.4811 2018-07-26 12:50:18.490
99.4975 2018-07-26 12:50:18.490

数据表

datePar
2018-07-26 12:47:18.060
2018-07-26 12:48:18.060
2018-07-26 12:49:18.060
2018-07-26 12:50:18.060
2018-07-26 12:51:18.060

预期结果

processval  dateentered
0   12:48:18:060 
14.7514 12:48:18:060
27.2616 12:48:18:060
26.7243 12:48:18:060
60.8281 12:48:18:060
63.4687 12:48:18:060
60.9732 12:48:18:060
68.0573 12:48:18:060
0   12:48:18:060
14.7555 12:48:18:060
27.2591 12:48:18:060
26.7345 12:48:18:060
60.8154 12:48:18:060
63.4356 12:48:18:060
60.9401 12:48:18:060
68.1057 12:48:18:060
0   12:48:18:060
14.7555 12:48:18:060
27.2591 12:48:18:060
26.7345 12:48:18:060
60.8154 12:48:18:060
63.4356 12:48:18:060
60.9401 12:48:18:060
68.1057 12:48:18:060
0   12:49:18:060
21.1506 12:49:18:060
27.1649 12:49:18:060
27.0706 12:49:18:060
61.3094 12:49:18:060
64.7775 12:49:18:060
61.8161 12:49:18:060
70.0078 12:49:18:060
0   12:49:18:060
22.8971 12:49:18:060
27.0859 12:49:18:060
26.9688 12:49:18:060
70.9347 12:49:18:060
68.5385 12:49:18:060
67.7925 12:49:18:060
72.6892 12:49:18:060
0   12:50:18:060
23.5001 12:50:18:060
30.5184 12:50:18:060
26.9102 12:50:18:060
71.5178 12:50:18:060
69.906  12:50:18:060
68.867  12:50:18:060
84.3287 12:50:18:060
0   12:50:18:060
23.9836 12:50:18:060
36.8819 12:50:18:060
26.844  12:50:18:060
73.7739 12:50:18:060
71.9634 12:50:18:060
71.0493 12:50:18:060
93.7401 12:50:18:060
0   12:51:18:060
24.6327 12:51:18:060
44.1773 12:51:18:060
26.8567 12:51:18:060
76.1497 12:51:18:060
74.3621 12:51:18:060
73.4811 12:51:18:060
99.4975 12:51:18:060

表 A 正在使用表 B 的数据范围内的值。 非常感谢任何帮助。 谢谢。

您可以尝试使用LEAD函数从tblB获取下一个 DateTime,然后在 DateTime 期间与tblA join

SELECT processval,nextDt FROM tblA a 
inner join (
    select *,lead(datePar,1,datePar)  over(order by datePar) nextDt
    from tblB
) b on a.dateentered between b.datePar and b.nextDt

sqlfiddle

对于最后一个操作数'<='我需要为 tblB 设置第二个日期时间列。 我本来可以递归的; 但该列已经存在,所以我只需要调用它,这样我就可以与它进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM