Извлечение данных подзапроса в операторе выбора с использованием регистра - PullRequest
1 голос
/ 03 октября 2019

У меня есть данные в следующем формате

   ID  name   order    start Time                       end time
    2   null    1   30-SEP-19 11.13.39.000000000 PM  30-SEP-19 11.15.21.000000000 PM
    5   null    2   30-SEP-19 11.15.21.000000000 PM  30-SEP-19 11.19.25.000000000 PM
    2   null    4   30-SEP-19 11.20.08.000000000 PM  30-SEP-19 11.20.59.000000000 PM
    5   null    5   30-SEP-19 11.21.00.000000000 PM  30-SEP-19 11.25.02.000000000 PM

Первая строка - это идентификатор, а третья строка - это порядок

Мне нужно, чтобы элемент управления находился в первой строке, а затем во втором столбце (имя) Мне нужно написать отдельный запрос, где я хочу выбрать запись из таблицы, где данные меньше, чем время окончания первой строки, и это должно продолжаться, пока все строки не будут завершены.

Я пробовал все подходы, какзапись подзапроса для второго столбца, но каждая попытка не удалась.

Редактировать

Таблица 2:

Name1   30-SEP-19 11.13.39.000000000 PM
name2   30-SEP-19 11.16.39.000000000 PM

Если вы видите таблицу выше, мне нужно запросить эту таблицу с концавремя в таблице1, поэтому итоговый результат будет

   ID  name   order    start Time                       end time
    2   name1   1   30-SEP-19 11.13.39.000000000 PM  30-SEP-19 11.15.21.000000000 PM //since name1 record end time is less than record 1 end time
    5   null    2   30-SEP-19 11.15.21.000000000 PM  30-SEP-19 11.19.25.000000000 PM
    2   null    4   30-SEP-19 11.20.08.000000000 PM  30-SEP-19 11.20.59.000000000 PM
    5   null    5   30-SEP-19 11.21.00.000000000 PM  30-SEP-19 11.25.02.000000000 PM

Теперь для второй поданной записи имя должно быть end time >= record1 endtime and end time < record2 end time

Редактировать

Таблица2:

ID  Name           Start Time                        End Time
2   780     30-SEP-19 11.13.39.000000000 PM 30-SEP-19 11.15.21.000000000 PM
5   782     30-SEP-19 11.15.21.000000000 PM 30-SEP-19 11.19.25.000000000 PM
2   786     30-SEP-19 11.20.08.000000000 PM 30-SEP-19 11.20.59.000000000 PM
5   788     30-SEP-19 11.21.00.000000000 PM 30-SEP-19 11.25.02.000000000 PM

Порядок имен неправильный, мне удалось увидеть правильное количество записей с неправильным порядком.

Name column данные в первой записи таблицы 2 должны быть добавлены в первую запись таблицы 1 и т. Д. на, но это не в правильном порядке с решениемпо предоставленной. Также конец обеих записей таблицы 2 может совпадать с таблицей 1 и быть меньше таблицы 1, но не может быть больше таблицы 1.

Правка

Таблица1:

   ID  Type Order      start time                          end time
    2   2   1      30-SEP-19 11.13.39.000000000 PM  30-SEP-19 11.15.21.000000000 PM
    5   2   2      30-SEP-19 11.15.21.000000000 PM  30-SEP-19 11.19.25.000000000 PM
    2   2   4      30-SEP-19 11.20.08.000000000 PM  30-SEP-19 11.20.59.000000000 PM
    5   2   5      30-SEP-19 11.21.00.000000000 PM  30-SEP-19 11.25.02.000000000 PM

Таблица 2:

ID  Name     start time                               end time
2   780  30-SEP-19 11.13.39.000000000 PM    30-SEP-19 11.15.21.000000000 PM
5   782  30-SEP-19 11.15.21.000000000 PM    30-SEP-19 11.19.25.000000000 PM
2   786  30-SEP-19 11.20.08.000000000 PM    30-SEP-19 11.20.59.000000000 PM
5   788  30-SEP-19 11.21.00.000000000 PM    30-SEP-19 11.25.02.000000000 PM

Теперь конечный результат будет

ID  Type Order    Name          start time                          end time
 2    2    1      780   30-SEP-19 11.13.39.000000000 PM 30-SEP-19 11.15.21.000000000 PM
 5    2    2      782   30-SEP-19 11.15.21.000000000 PM 30-SEP-19 11.19.25.000000000 PM
 2    2    4      786   30-SEP-19 11.20.08.000000000 PM 30-SEP-19 11.20.59.000000000 PM
 5    2    5      788   30-SEP-19 11.21.00.000000000 PM 30-SEP-19 11.25.02.000000000 PM

Имя столбца в первой строке таблицы2 должно быть добавлено в таблицу table1 до последней строки. Здесь ключом является время окончания, и я не могу использовать внутреннее соединение по времени окончания, потому что оно может быть одинаковым для таблицы 1, а время окончания таблицы 2 или таблицы 2 может быть меньше, чем таблица 1, но не больше.

Редактировать

ID  Type Order    Name          start time                          end time
 2    2    4      780   30-SEP-19 11.20.08.000000000 PM 30-SEP-19 11.20.59.000000000 PM
 5    2    5      782   30-SEP-19 11.21.00.000000000 PM 30-SEP-19 11.25.02.000000000 PM

1 Ответ

1 голос
/ 03 октября 2019

Вы можете попробовать выполнить запрос ниже -

SELECT T1.ID, T2.name, T1.order, T1.start_Time, MAX(T1.end_time)
FROM TABLE_1 T1
JOIN TABLE_2 T2 ON T1.end_time >= T2.end_time
                AND T1.ID = T2.ID
GROUP BY T1.ID, T2.name, T1.order, T1.start_Time
ORDER BY T1.order

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

SELECT T1.ID, T2.name, T1.order, T1.start_Time, MAX(T1.end_time)
FROM (select *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY end_time) RN
      FROM TABLE_1)  T1
JOIN (select *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY end_time)
      FROM TABLE_2) T2 ON T1.ID = T2.ID
                       AND T1.RN = T2.RN
GROUP BY T1.ID, T2.name, T1.order, T1.start_Time
ORDER BY T1.order
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...