sql - 按每个日期的 ID 和最近的日期连接表

标签 sql date dataset

我有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/

相关文章:

sql - 如何找到字符列的 MAX() 值?

java - 将日期格式化为字符串

python - 在 Python 中解析 rfc3339 日期字符串?

mysql - 如何更新日期时间MySQL中的空时间

machine-learning - 在哪里可以找到 WdRef 数据集?

c# - 使用静态数据集作为数据源

c# - 使用 C#/VB.Net 将数据集转换为 JSON

python - 如何在 SQL 数据库中存储 python float

MySQL——条件分组依据

mysql - 复杂的 MySQL 查询给出了不正确的结果