Debe mostrar solo los registros que se crean después de la expiración de la identificación de la solicitud anterior.
https://i.stack.imgur.com/jUm97.png
I/P-
REQUEST_ID CREATED_DATE EXPIRY_DATE 1 2020-06-02 2020-06-06 2 2020-06-04 2020-06-10 3 2020-06-08 2020-06-12 4 2020-06-09 2020-06-16 5 2020-06-09 2020-06-15 6 2020-06-18 2020-06-20 7 2020-06-21 2020-06-25O/P -
REQUEST_ID CREATED_DATE EXPIRY_DATE 1 2020-06-02 2020-06-06 3 2020-06-08 2020-06-12 6 2020-06-18 2020-06-20 7 2020-06-21 2020-06-25Si está ejecutando MySQL 8.0, puede hacerlo con funciones de ventana:
select request, created_at, expiry_date from ( select t.*, lag(expiry_date) over(order by request) lag_expiry_date from mytable t ) t where lag_expiry_date is date or created_at > lag_expiry_date Por otro lado, si desea seleccionar registros de forma incremental en función de la diferencia con el último registro válido, entonces es un poco más complicado. Necesita algún tipo de proceso iterativo, lo que sugiere una consulta recursiva. Básicamente, puede enumerar todas las filas con row_number() y luego procesarlas una por una, decidiendo cuál se mantendrá.
with recursive data as ( select t.*, row_number() over(order by created_date) rn from mytable t ), cte as ( select d.*, 1 to_keep, expiry_date last_expiry_date from data d where rn = 1 union all select d.*, (d.created_date > c.last_expiry_date), case when d.created_date > c.last_expiry_date then d.expiry_date else c.last_expiry_date end from cte c inner join data d on d.rn = c.rn + 1 ) select request_id, created_date, expiry_date from cte where to_keep order by rn | request_id | created_date | expiry_date | | ---------- | ------------ | ----------- | | 1 | 2020-06-02 | 2020-06-06 | | 3 | 2020-06-08 | 2020-06-12 | | 6 | 2020-06-18 | 2020-06-20 | | 7 | 2020-06-21 | 2020-06-25 |