Received: from maia.hub.org (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id C964D634CDF for ; Wed, 24 Mar 2010 11:29:50 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 00341-01 for ; Wed, 24 Mar 2010 14:29:29 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.17.8]) by mail.postgresql.org (Postfix) with ESMTP id F0940632EA0 for ; Wed, 24 Mar 2010 11:29:38 -0300 (ADT) Received: from webserv.wug.de ([194.25.154.138]) by mrelayeu.kundenserver.de (node=mreu1) with ESMTP (Nemesis) id 0LiZ0S-1NKIQO2qS4-00ccAo; Wed, 24 Mar 2010 15:29:36 +0100 Received: from kretschmer by webserv.wug.de with local (Exim 3.36 #1) id 1NuRaS-0005N2-00 for pgsql-sql@postgresql.org; Wed, 24 Mar 2010 15:29:36 +0100 Date: Wed, 24 Mar 2010 15:29:36 +0100 From: "A. Kretschmer" To: pgsql-sql@postgresql.org Subject: Re: window function to sort times series data? Message-ID: <20100324142936.GB15442@a-kretschmer.de> References: <20100324140832.GA5864@apartia.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20100324140832.GA5864@apartia.fr> X-OS: Debian/GNU Linux - weil ich es mir Wert bin! User-Agent: Mutt/1.5.9i X-Provags-ID: V01U2FsdGVkX1+kHsDIZYELZ6NbjP5B2QbUvx3+hnTVmoDqEwI 6A4VkouXEHD5MdRj882HmJx/FDaU22lnPxQPozDg386XHSqfX0 FjokJkYJtxGiX7+y3sYWA== X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.955 tagged_above=-10 required=5 tests=AWL=0.644, BAYES_00=-2.599 X-Spam-Level: X-Archive-Number: 201003/172 X-Sequence-Number: 33879 In response to Louis-David Mitterrand : > Hi, > > I have time series data: price(id_price int, price int, created_on timestamp) > > I'd like to select the latest price before, say, 2010-03-10 and the > latest price after that date. test=*# select * from price ; id_price | price | created_on ----------+-------+--------------------- 1 | 10 | 2010-01-01 00:00:00 1 | 12 | 2010-02-01 00:00:00 1 | 8 | 2010-03-01 00:00:00 1 | 15 | 2010-03-10 00:00:00 1 | 13 | 2010-03-20 00:00:00 (5 rows) test=*# select * from ( select distinct on(id_price) id_price, price, created_on from price where created_on < '2010-02-20'::date order by id_price, created_on desc ) foo union all select * from ( select distinct on(id_price) id_price, price, created_on from price where created_on > '2010-02-20'::date order by id_price, created_on asc ) bar order by id_price,created_on ; id_price | price | created_on ----------+-------+--------------------- 1 | 12 | 2010-02-01 00:00:00 1 | 8 | 2010-03-01 00:00:00 (2 rows) That's okay for you? Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header) GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431 2EB0 389D 1DC2 3172 0C99