PostgreSQL: ¿Cómo devolver filas con respecto a una fila encontrada (resultados relativos)?
Perdona mi ejemplo si no tiene sentido. Voy a intentar con una simplificada para fomentar una mayor participación.
Considere una tabla como la siguiente:
dt | mnth | foo
--------------+------------+--------
2012-12-01 | December |
...
2012-08-01 | August |
2012-07-01 | July |
2012-06-01 | June |
2012-05-01 | May |
2012-04-01 | April |
2012-03-01 | March |
...
1997-01-01 | January |
Si buscas el disco condt
más cercano a hoy sin revisar, ¿cuál sería la mejor manera de devolver también el3 registros de antemano y7 registros despues?
Decidí probar las funciones de ventanas:
WITH dates AS (
select row_number() over (order by dt desc)
, dt
, dt - now()::date as dt_diff
from foo
)
, closest_date AS (
select * from dates
where dt_diff = ( select max(dt_diff) from dates where dt_diff <= 0 )
)
SELECT *
FROM dates
WHERE row_number - (select row_number from closest_date) >= -3
AND row_number - (select row_number from closest_date) <= 7 ;
Siento que debe haber una mejor manera de devolver los registros relativos con una función de ventana, pero ha pasado un tiempo desde que los miré.