Объединение таблиц с двумя разными датами (SQL) - PullRequest
0 голосов
/ 23 апреля 2020

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

У меня есть одна таблица, которая имеет:

id    date_1       daily_count
----------------------------
1     1/1/20           1
1     1/2/20           1 
1     1/3/20           2 
2     1/1/20           3 
2     2/1/20           1 

и у меня есть еще одна таблица, которая имеет:

id    date_2 
-------------
1     1/1/20           
1     1/2/20
1     1/2/20      
1     1/4/20 
1     1/7/20          
2     1/4/20           
2     2/1/20           

Я хочу показать что-то вроде:

id    date_1    daily_count    date_2    date_2_count
------------------------------------------------------
1     1/1/20         1         1/1/20          1
1     1/2/20         1         1/2/20          2
1     1/3/20         2          null          null
1      null         null       1/4/20          1 
1      null         null       1/7/20          1 
2     1/1/20         3          null          null 
2      null         null       1/4/20          1 
2     2/1/20         1         2/1/20          1 

Возможно ли это вообще сделать? Всякий раз, когда я пытаюсь соединить эти две таблицы, используя идентификатор, я получаю повторяющиеся значения date_2 для каждой date_1, и чувствую себя супер потерянным ... любой вклад будет оценен!

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Это так! Повторяющиеся значения вызваны присоединением только на id. Судя по всему, вам нужно присоединиться к id и table1.date_1 = table2.date_2, чтобы получить по одной строке для каждого. Другая вещь - и неясно, делаете ли вы это уже, не видя запроса, - это то, что вам нужно будет использовать full outer join, чтобы сохранить значения из обеих таблиц, даже если одна сторона не имеет определенного ID / дата.

0 голосов
/ 23 апреля 2020

Вы, кажется, хотите full join:

select coalesce(t1.id, t2.id) as id, t1.date, t1.daily_count,
       t2.date, t2.daily_count
from table1 t1 full join
     (select t2.id, t2.date, count(*) as daily_count
      from table2 t2
      group by t2.id, t2.date
     ) t2
     on t1.id = t2.id and t1.date = t2.date;
...