BigQuery объединяет 2 таблицы на основе 2 значений - PullRequest
0 голосов
/ 27 февраля 2019

Еще раз спрашивая, как мне не повезло раньше

Есть ли способ объединить 2 таблицы по серийному номеру и использовать диапазон дат из одной таблицы и даты из другой?

У меня есть2 таблицы: table.events содержит данные о событиях для трекера, а table.dates содержит дату работы трекера.Трекер может работать несколько раз и поэтому имеет UID при каждом включении.Например, Tracker 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, которые оба отслеживали 23/01/2019.У меня есть отдельные записи в table.events для D и E, поэтому мне нужно будет сопоставить по диапазону дат и подстроке серийного идентификатора.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Как вы присоединяетесь по датам?Если посмотреть на пример результата, он не будет выглядеть как event.Date, попадающий в диапазон дат1003 *

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
0 голосов
/ 27 февраля 2019

вы можете объединить все данные, используя

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

, однако, если вы хотите объединить таблицы по определенному значению, вам нужно значение, в лучшем случае идентификатор, который является значением каждой таблицы.

Я не могу сделать вывод, какие данные можно использовать для связи события и операции.Возможным решением было бы реализовать серийный идентификатор в таблице событий.тогда вы можете найти это значение в обеих таблицах и использовать код:

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;

Если у вас есть какие-либо дополнительные вопросы, не стесняйтесь обращаться ко мне.

С уважением,

Jens

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...