sql - PostgreSQL: How to return rows with respect to a found row (relative results)? -


forgive example if not make sense. i'm going try simplified 1 encourage more participation.

consider table following:

  •        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   |   

if record dt closest today w/o going over, best way return 3 records beforehand , 7 records after?

i decided try windowing functions:

  • with dates (    select  row_number() on (order dt desc)          , dt          , dt - now()::date dt_diff       foo ) , closest_date (    select * dates    dt_diff = ( select max(dt_diff) dates dt_diff <= 0 ) )  select *    dates  row_number - (select row_number closest_date) >= -3    , row_number - (select row_number closest_date) <=  7 ; 

i feel there must better way return relative records window function, it's been time since i've looked @ them.

create table foo (dt date); insert foo values ('2012-12-01'), ('2012-08-01'), ('2012-07-01'), ('2012-06-01'), ('2012-05-01'), ('2012-04-01'), ('2012-03-01'), ('2012-02-01'), ('2012-01-01'), ('1997-01-01'), ('2012-09-01'), ('2012-10-01'), ('2012-11-01'), ('2013-01-01') ;  select dt ( (     select dt     foo     dt <= current_date     order dt desc     limit 4 ) union (     select dt     foo     dt > current_date     order dt     limit 7 )) s order dt ;      dt      ------------  2012-03-01  2012-04-01  2012-05-01  2012-06-01  2012-07-01  2012-08-01  2012-09-01  2012-10-01  2012-11-01  2012-12-01  2013-01-01 (11 rows) 

Comments

Popular posts from this blog

jquery - Invalid Assignment Left-Hand Side -

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -