Запуск запроса с определенной первой строки - PullRequest
0 голосов
/ 25 февраля 2020

Привет, сообщество StackoverFlow,

Я бы хотел сделать следующее в Oracle SQL

Таблица запросов выглядит так:

M_id  s_s_u             s_e_u              a_s_t  e_i   sr1  
K1    2020-02-19 13:00  2020-02-19 13:10   MS     P12   CI
K1    2020-02-19 13:10  2020-02-19 13:17   MS     P11   CI
K2    2020-02-19 13:04  2020-02-19 13:14   MT     P13   CD
K2    2020-02-19 13:14  2020-02-19 13:23   MT     P18   CI

Что бы я хотел нравится делать следующее.

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

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

Последние записи

M_id    s_e_u                a_s_t  e_i   sr1  
K1      2020-02-19 13:17      MS     P12   CI
K2      2020-02-19 13:23      MS     P12   CI

Я успешно получил строки из MS SQL, но я не могу понять, как определить первую строку для запроса для загрузки. Необходимо продолжить поток данных, поэтому s_e_u из последних записей = S_Su для следующей записи.

Текущий запрос для создания первой таблицы в этом посте довольно длинный, я могу поделиться им, если это необходимо.

Если бы вы могли sh указать мне направление решения, где я мог бы использовать записи таблицы last_records в качестве отправной точки для фактического запроса, который был бы великолепен.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Если я правильно понимаю, вы, кажется, хотите что-то вроде этого:

select t1.*
from table1 t1
where t1.s_s_u > (select max(t2.s_s_u) from table2 t2 where t2.m_id = t.m_id)
0 голосов
/ 25 февраля 2020

Звук как проблема с пропусками и островками. Если вы ищете то, что я думаю, вы сможете сделать это с match_recognize; нет необходимости в промежуточной таблице последних записей.

Примерно так:

WITH test_data AS (
    select 'K1' as M_id,to_date('02/19/2020 13:00:00','mm/dd/yyyy hh24:mi:ss') as s_s_u,to_date('02/19/2020 13:10:00','mm/dd/yyyy hh24:mi:ss') as s_e_u,'MS' as a_s_t,'P12' as e_i,'CI' as sr1 from dual union all
    select 'K1' as M_id,to_date('02/19/2020 13:10:00','mm/dd/yyyy hh24:mi:ss') as s_s_u,to_date('02/19/2020 13:17:00','mm/dd/yyyy hh24:mi:ss') as s_e_u,'MS' as a_s_t,'P11' as e_i,'CI' as sr1 from dual union all
    select 'K2' as M_id,to_date('02/19/2020 13:04:00','mm/dd/yyyy hh24:mi:ss') as s_s_u,to_date('02/19/2020 13:14:00','mm/dd/yyyy hh24:mi:ss') as s_e_u,'MT' as a_s_t,'P13' as e_i,'CD' as sr1 from dual union all
    select 'K2' as M_id,to_date('02/19/2020 13:14:00','mm/dd/yyyy hh24:mi:ss') as s_s_u,to_date('02/19/2020 13:23:00','mm/dd/yyyy hh24:mi:ss') as s_e_u,'MT' as a_s_t,'P18' as e_i,'CI' as sr1 from dual
)

SELECT m.m_id,
       m.match_overall_s_s_u,
       m.match_overall_s_e_u
FROM test_data c
match_recognize(
    PARTITION BY m_id
    ORDER BY s_s_u
    MEASURES
        FIRST(s_s_u) AS match_overall_s_s_u,
        LAST(s_e_u)  AS match_overall_s_e_u
    pattern ( 
        anything
        connected_val*
    ) define
        connected_val AS s_s_u = prev(s_e_u) /* Record is connected with the previous if its start equals the previous record's end */
) m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...