Исключая даты на основе значения даты в столбце - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть таблица ниже.

Я хочу исключить строки, в которых дата start_cycle равна >, чем дата, в которой столбец 'source' = END_DATE.Таким образом, для этого примера удаление любых строк, где дата начала_цикла> 2/11/2019

END_DATE, может отличаться для каждого идентификатора

ID           START_CYCLE    END_CYCLE   SOURCE
1               1/20/2019   2/1/2019    START
1               2/2/2019    2/2/2019    START_BRA
1               2/3/2019    2/5/2019    ASSGN
1               2/6/2019    2/10/2019   CUST_START
1               2/11/2019   2/12/2019   ASSGN
1              2/11/2019    12/31/2999  END_DATE
1               1/1/3000    2/12/2019   END_DATE_BRA

. Для этого примера ожидаемые результаты будут: (Удаление последнего ряда)

ID           START_CYCLE    END_CYCLE   SOURCE
1               1/20/2019   2/1/2019    START
1               2/2/2019    2/2/2019    START_BRA
1               2/3/2019    2/5/2019    ASSGN
1               2/6/2019    2/10/2019   CUST_START
1               2/11/2019   2/12/2019   ASSGN
1               2/11/2019   12/31/2999  END_DATE

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Вы можете сделать это с помощью CTE.Сначала вы запросите START_CYCLE для всех идентификаторов с SOURCE = 'END_DATE'.После этого вы присоединитесь к этому результату:

WITH id_end_date as 
(
SELECT id, start_cycle
FROM table1
WHERE source = 'END_DATE'
)
SELECT to.*
FROM table1 to
INNER JOIN id_end_date
ON to.id = id_end_date.id
WHERE to.start_cycle > id_end_date.start_cycle
;
0 голосов
/ 12 февраля 2019

Вы можете сделать это без объединения, при условии, что для каждого id имеется только 1 строка с source = 'END_DATE':

select * from tablename t
where start_cycle <= (select start_cycle from tablename where id = t.id and source = 'END_DATE')
0 голосов
/ 12 февраля 2019

Ниже приведен запрос, при условии, что в таблице будет несколько идентификаторов.

select from <tableName> t1 inner join (select * from <tableName> where source='END_DATE') t2 
on t1.id=t2.id and t1.start_cycle > t2.start_cycle;
...