我有2张 table :
表格1
id date_measured value 1
1 01/01/2017 5
1 02/20/2017 6
1 04/01/2017 5
2 03/02/2017 5
2 04/02/2017 3
表2
id date_measured value 2
1 01/06/2017 5
1 03/01/2017 6
2 02/01/2017 5
2 03/09/2017 7
2 04/05/2017 4
我想加入它,以便每个 id 匹配并且最近的日期匹配,因此:
id date_measured1 value 1 date_measured2 value 2
1 01/01/2017 5 01/06/2017 5
1 02/20/2017 6 03/01/2017 6
2 02/01/2017 5 02/01/2017 5
2 03/02/2017 5 03/09/2017 7
2 04/02/2017 3 04/05/2017 4
等。 IE 为每个测量的每个日期的每个 id 取另一个表中最接近的测量日期并将其排成一行。接近的东西
SELECT *
FROM table1 a
INNER JOIN table2 b
ON a.id = b.id
AND <date from a is closest date from b>
但我不知道如何做第二部分。有什么建议?
最佳答案
在标准 SQL 中,您可以使用相关子查询获取日期:
select t1.*,
(select t2.date_measured
from table2 t2
where t2.id = t1.id
order by abs(t2.date_measured - t1.date_measured) asc
fetch first 1 row only
) as t2_date_measured
from table1 t1;
然后您可以加入回
table2
从该行获取其他信息。以上是通用SQL(不一定是标准SQL)。日期/时间函数往往是每个数据库特有的;所以
-
可能对差异不起作用。并非所有数据库都支持 fetch first 1 row only
,但几乎都支持某种机制来做同样的事情。
关于sql - 按每个日期的 ID 和最近的日期连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47101679/