BigQuery引导基于2个值的2个表

时间:2019-02-27 15:31:22

标签: sql datetime join google-bigquery

再次问起我之前没有运气

是否可以通过序列号组合两个表,并使用一个表中的日期范围和另一个表中的日期组合?

我有2个表:table.events包含跟踪器的事件数据,而table.dates包含跟踪器的运行日期。跟踪器可以多次运行,因此每次打开时都有一个UID。例如。跟踪器A可以具有UID A1,A2,A3等。

如何将table.events与诸如以下数据相结合

Date,Serial,Quality,
12/01/2019,A,1,
12/01/2019,B,2,
13/01/2019,C,3,
14/01/2019,A,4,
15/01/2019,A,5,
16/01/2019,B,6,
17/01/2019,B,7,
17/01/2019,C,8,
17/01/2019,B,9

带有table.dates

Start_Date,End_Date,Serial_id,
15/01/2019,18/01/2019,A1,
08/01/2019,14/01/2019,A2,
10/02/2019,18/01/2019,B1,
13/01/2019,16/01/2019,C1,
17/02/2019,18/01/2019,C2

给我一​​个最终结果,例如

Date,Serial,Serial_id,Quality,Start Date,End Date
12/01/2019,A,A1,1,15/01/2019,18/01/2019
12/01/2019,B,B1,2,10/02/2019,18/01/2019
13/01/2019,C,C1,3,13/01/2019,16/01/2019
14/01/2019,A,A1,4,15/01/2019,18/01/2019
15/01/2019,A,A2,5,08/01/2019,14/01/2019
16/01/2019,B,B1,6,10/02/2019,18/01/2019
17/01/2019,B,B1,7,10/02/2019,18/01/2019
17/01/2019,C,C2,8,17/02/2019,18/01/2019
17/01/2019,B,B1,9,10/02/2019,18/01/2019

任何帮助将不胜感激。

也:

一个日期将包含多个序列号,所以我也想按序列号加入。

例如

我有跟踪器D1和E1都在2019年1月23日进行跟踪。我在table.events中有D和E的单独条目,因此我需要按日期范围和序列ID的子字符串进行匹配。

2 个答案:

答案 0 :(得分:1)

您可以使用合并所有数据

select
     Date,
     Serial,
     Serial_id,
     Quality,
     Start Date,
     End Date
from
     events,
     dates;

但是,如果您想将表连接到特定值,则需要一个值(最好是id),该值是每个表的值。

我无法断定可以使用哪些数据来连接事件和操作。一种可能的解决方案是在事件表中实现序列号。那么您可以在两个表中找到该值并使用代码:

select
    event.Date,
    event.Serial,
    event.quality,
    event.serial_id
    date.start date
    date.end date
from
    event
full outer join
    date
on
    date.serial_id=event.serial_id;

如果您还有其他问题,请随时与我联系。

最诚挚的问候,

詹斯

答案 1 :(得分:0)

您如何按日期加入?通过查看示例结果,它看起来不会像event.Date属于date.Start_date和date.End_date

的范围

如果您只想按序列号加入,则可以执行以下操作

SELECT * FROM events e 
inner join dates d 
on e.Serial = substring(d.Serial_id, 1, 1)

如果您确实想添加日期范围作为约束,则可以添加

and e.Date <= d.End_date and e.Date >= d.Start_date