ingres 10s sql номер строки - PullRequest
0 голосов
/ 04 июня 2018

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

Таблица одна:

from_date
01.01.18
15.01.18
23.01.18
01.02.18

Таблица два:

to_date
15.01.18
23.01.18
01.02.18
05.02.18

Все, что я хочу сделать, это присоединитьсяих на a.row_number = b.row_number

Я не могу найти способ в Ingres SQL сделать это.Лучшая идея - добавить столбец с номерами строк в каждую таблицу и присоединиться к ней.Я столкнулся с функцией CREATE SEQUENCE, но не могу найти четких инструкций по ее применению

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

с temp1 как (

выберите row_number () более (порядок по дате_даты) в качестве строки из таблицыA

),

temp2 как (

выберите row_number () over (order by from_date) как строку из таблицыB

)

выберите a. , b.

из temp1 a

присоединиться к temp2 b на a.row = b.row

0 голосов
/ 04 июня 2018

В соответствии с инструкцией Ingres поддерживает оконные функции и row_number(), поэтому вы должны иметь возможность:

select coalese(a.rn, b.rn) as rn, a.from_date, b.to_date
from (
   select from_date, row_number() over (order by from_date) as rn
   from table_a
) a 
  full join (
    select to_date, row_number() over (order by to_date) as rn
    from table_b
  ) b on a.rn = b.rn;

Полное (внешнее) объединение гарантирует, что строки из обоихтаблицы возвращаются, даже если в одной таблице меньше строк, чем в другой.Если вы на 100% уверены, что обе таблицы всегда содержат одинаковое количество строк, вы можете вместо этого использовать внутреннее объединение (удалите ключевое слово full)

У меня нет Ingres для проверки этого, поэтому, хотявыше приведен стандарт SQL ANSI, могут быть вещи, которые Ingres не поддерживает

проще без полного внешнего объединения и coalesce():

select a.rn, a.from_date, b.to_date
from (
   select from_date, row_number() over (order by from_date) as rn
   from table_a
) a 
  join (
    select to_date, row_number() over (order by to_date) as rn
    from table_b
  ) b on a.rn = b.rn;
...