связать 2 таблицы по id и по дате, но дата не точно равна другой, а находится в диапазоне, что-то вроде:
select *
from T1
full join T2 on T2.id = T1.id
and T2.Date between dateadd(DAY, -1, T1.Date) and dateadd(DAY, 1, T1.Date)
Гуглила в этом чате похожие запросы, asof join не подходит, к сожалению, тк у меня диапазон. Перенести условие в секцию where тоже не могу, потому что это full join и мне нужно видеть несовпадающие строки, а where их отрежет. Думала может диапазон в массив положить и как-то так смотреть..
Может быть у вас будут какие-то идеи? Спасибо! Вот запрос для тестирования:
with T1 as
(
select 2 as N, 1 as id, toDate('2022-01-02') as Date
union all
select 1 as N, 1 as id, toDate('2022-01-03') as Date
union all
select 3 as N, 1 as id, toDate('2022-01-04') as Date
union all
select 1 as N, 2 as id, toDate('2022-01-05') as Date
),
T2 as
(
select 3 as N, 1 as id, toDate('2022-01-04') as Date
union all
select 1 as N, 1 as id, toDate('2022-01-05') as Date
union all
select 4 as N, 1 as id, toDate('2022-01-06') as Date
union all
select 1 as N, 1 as id, toDate('2022-01-07') as Date
union all
select 3 as N, 2 as id, toDate('2022-01-04') as Date
union all
select 1 as N, 2 as id, toDate('2022-01-05') as Date
union all
select 4 as N, 2 as id, toDate('2022-01-06') as Date
union all
select 1 as N, 2 as id, toDate('2022-01-07') as Date
)
select
T1.Date,
T2.Date,
T1.id,
T2.id,
sum(T1.N),
sum(T2.N)
from T1
full join T2 on T2.id = T1.id
and T2.Date = T1.Date
group by T1.Date, T2.Date, T1.id, T2.id
order by T1.Date desc, T2.Date desc
Full ? Или все таки left? Where работает после джойна, поэтому вы через or можете дописать условий between... or t2 is null or ...
Спасибо, точно full( я пробовала дописать в условие, но он просто отрезает ненужные строки, а мне бы надо, чтобы суммы по ним попали в несматченные записи..
То есть нужно, чтобы фильтровалось именно на уровне джоина, а все что не попало, суммировалось отдельно. Спасибо!
Ну так сделайте from t1,t2 where и впишите все условия
А так можно было?😅 спасибо, сча попробую!
Эм, ну он так inner join делает ) несовпадающих записей нет
Вы условия неправильно пишите значит. У вас or есть? Потренируйтесь на таблице из 2х строк.
Видимо да, но что-то я вообще не соображу как с помощью from T1, T2 получить аналог full join. Там же происходит декартово соединение и пустых строк не получается? Если не сложно, покажите, пожалуйста, на вот этом простом примере из таблиц из 2-х строк: Спасибо! with T1 as ( select 1 as id, 1 as N union all select 2 as id, 1 as N ), T2 as ( select 3 as id, 1 as N union all select 2 as id, 1 as N ) select T1.id, T2.id, sum(T1.N), sum(T2.N) from T1 full join T2 on T2.id = T1.id group by T1.id, T2.id
А ну в кх чтобы null были надо добавить settings join_use_nulls=1
Обсуждают сегодня