Size: a a a

2021 June 09

IB

Ilya Borovitinov in pro.elixir
Они предалают использовать window function, они эквивалентны или медленнее cross lateral join, но, возможно, более читабельны
источник

IB

Ilya Borovitinov in pro.elixir
(про производительность слышал, сам бенчмарки не запускал)
источник

AN

Alexey Novoselov in pro.elixir
либо делать соединение по on: b.id > a.last_id AND b.id < a.last_id + 3500 в тета-соединении
источник

IB

Ilya Borovitinov in pro.elixir
Крутая идея, если id без пропусков
источник

B

Bogdan in pro.elixir
есть пропуски да
источник

B

Bogdan in pro.elixir
все поломается
источник

AN

Alexey Novoselov in pro.elixir
вытащить границы можно через подзапрос в таком же тета-соединении a.id, min(b.id), max(b.id) и на основании них уже условия писать. Но кажется с window может попроще запрос выйти
источник

B

Bogdan in pro.elixir
так скорость конечно офигенная получается)
источник

B

Bogdan in pro.elixir
сейчас буду вникать в windows 🙂
источник

AD

Anastasiya Dyachenko in pro.elixir
cross потерялся же
источник

AD

Anastasiya Dyachenko in pro.elixir
и lateral
источник

B

Bogdan in pro.elixir
Это я через theta join делал.
источник

AD

Anastasiya Dyachenko in pro.elixir
так в том то и дело что это не theta join, а обычный join
источник

AD

Anastasiya Dyachenko in pro.elixir
потому и одна строка 🤷
источник

B

Bogdan in pro.elixir
одна строка из-за limit, он матчит первый A.
источник

B

Bogdan in pro.elixir
если лимит убрать то все ок, или сделать on: b.id > a.last_id AND b.id < a.last_id + 3500
источник

AD

Anastasiya Dyachenko in pro.elixir
окей, извиняюсь
источник

B

Bogdan in pro.elixir
я думаю можно сделать
 filter
источник

B

Bogdan in pro.elixir
источник

AN

Alexey Novoselov in pro.elixir
row_number() < 3500 тебе в помощь
источник