sql - 如何根据创建日期查找两个表中最接近的记录?

标签 sql postgresql google-bigquery

我有两个通过 user_id 关联的表,我需要使用以下条件连接这些表:

  • 首先,它们应该与自己的用户相关
  • 其次,对于第一个表中的每条记录,应该选择第二个表中与第一个表中创建日期最接近的相应记录。

考虑这两个表:

表_1
<表类=“s-表”> <标题> id user_id 姓名 创建时间 <正文> 1 11 一个 2023-01-01 12:00:00 2 11 B 2023-01-01 12:08:00 3 22 C 2023-01-01 13:00:00 4 33 D 2023-01-01 14:00:00
表_2
<表类=“s-表”> <标题> id user_id 创建时间 <正文> 1 11 2023-01-01 12:05:00 2 22 2023-01-01 13:03:00 2 22 2023-01-01 13:06:00 3 33 2023-01-01 14:12:00
预期结果
<表类=“s-表”> <标题> id user_id 姓名 创建时间 t2_created_at <正文> 1 11 一个 2023-01-01 12:00:00 2023-01-01 12:05:00 2 11 B 2023-01-01 12:08:00 空 3 22 C 2023-01-01 13:00:00 2023-01-01 13:03:00 4 33 D 2023-01-01 14:00:00 2023-01-01 14:12:00

最佳答案

横向连接的行为类似于 foreach 循环。以下内容在 PostgreSQL 中有效。它是一个左连接横向,用于处理示例结果中的 name 'B'。交叉连接横向不会返回该行。

select t1.*, t2.created_at as t2_created_at
  from table_1 t1
       left join lateral (select user_id, created_at
                             from table_2
                            where user_id = t1.user_id
                              and created_at >= t1.created_at
                            order by created_at
                            limit 1) t2
         on true;

Working fiddle

关于sql - 如何根据创建日期查找两个表中最接近的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76905512/

相关文章:

sql - 如何获得从两个月前的第一天到昨天的日期表?

php - 'name' 中的未知列 'field list'

java - jOOQ - 使用 refcursor 执行 postgres 用户定义的函数

java - 如何在 @EmbeddedId 属性中使用 Hibernate 的 @Filter 注释

sql - SQL Server 中区分大小写的变量名称?

sql - 如何在多个列中查找重复计数?

postgresql - 在 Postgres 中,如何使用 COPY 覆盖唯一行?

firebase - Firebase Analytics 仪表板和 BigQuery 导出之间的 "active users metric"差异

google-cloud-platform - 同一项目中的不同用户是否可以拥有不同的 BigQuery 配额?

google-cloud-platform - 每天从 Bigquery 加载数据到 Postgresql 云 SQL 数据库