184 похожих чатов

Добрый вечер! Помогите, пожалуйста, с джоином. Мне нужно

связать 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

9 ответов

16 просмотров

Full ? Или все таки left? Where работает после джойна, поэтому вы через or можете дописать условий between... or t2 is null or ...

Ilona- Автор вопроса
Denny [Altinity]
Full ? Или все таки left? Where работает после джо...

Спасибо, точно full( я пробовала дописать в условие, но он просто отрезает ненужные строки, а мне бы надо, чтобы суммы по ним попали в несматченные записи..

Ilona- Автор вопроса
Denny [Altinity]
Full ? Или все таки left? Where работает после джо...

То есть нужно, чтобы фильтровалось именно на уровне джоина, а все что не попало, суммировалось отдельно. Спасибо!

Ilona
Спасибо, точно full( я пробовала дописать в услови...

Ну так сделайте from t1,t2 where и впишите все условия

Ilona- Автор вопроса
Denny [Altinity]
Ну так сделайте from t1,t2 where и впишите все усл...

А так можно было?😅 спасибо, сча попробую!

Ilona- Автор вопроса
Denny [Altinity]
Ну так сделайте from t1,t2 where и впишите все усл...

Эм, ну он так inner join делает ) несовпадающих записей нет

Ilona
Эм, ну он так inner join делает ) несовпадающих за...

Вы условия неправильно пишите значит. У вас or есть? Потренируйтесь на таблице из 2х строк.

Ilona- Автор вопроса
Denny [Altinity]
Вы условия неправильно пишите значит. У вас or ест...

Видимо да, но что-то я вообще не соображу как с помощью 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

Ilona
Видимо да, но что-то я вообще не соображу как с по...

А ну в кх чтобы null были надо добавить settings join_use_nulls=1

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта