Объединение наборов записей, где объединенное значение находится между базовым значением и более высоким базовым значением в другой строке - PullRequest
0 голосов
/ 29 мая 2020

Я хочу присоединиться к набору записей, в котором конкретное значение в столбце соединяющейся таблицы находится между значениями в строках базовых таблиц. Данная таблица b остается присоединенной к a:

WITH a (v) AS (
 VALUES (1),(3),(5),(7),(9)
), b (v) AS (
 VALUES (1),(2),(3),(4),(5)
) SELECT a.v, b.v FROM a
LEFT JOIN b ON b.v >= a.v /* AND ??? */

целевой результат (c), который я надеюсь достичь:

a  join  b   =   c
v        v       v
-        -      ---
1        1      1,1
3        2      1,2
5        3      3,3
7        4      3,4
9        5      5,5
                7,
                9

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

1 Ответ

1 голос
/ 29 мая 2020
WITH 
  a (v) AS (SELECT column1 FROM ( VALUES (1),(3),(5),(7),(9) ) a)
, b (v) AS (SELECT column1 FROM ( VALUES (1),(2),(3),(4),(5) ) b) 
, a2    AS (select a.v, lead(a.v) over () as v_l from a)
select a2.v,b.v from a2 left join  b on (b.v < a2.v_l and b.v >= a2.v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...