From: Michael Glaesemann <grzm@seespotcode.net>
To: Joel Richard <postgres@joelrichard.com>
Cc: D'Arcy J.M. Cain <darcy@druid.net>
Cc: Claudia Kosny <ckosny@gmx.net>
Cc: sql pgsql <pgsql-sql@postgresql.org>
Subject: Re: fetch first rows of grouped data
Date: Mon, 27 Aug 2007 13:12:48 -0500
Message-ID: <60F656A0-805D-4C3B-BCA5-742AC6C866E0@seespotcode.net> (raw)
In-Reply-To: <4CB5D209-C0CC-466E-A967-E766D6AD799B@joelrichard.com>
References: <46D2FD9F.3020000@gmx.net>
<20070827125102.e52b43de.darcy@druid.net>
<4CB5D209-C0CC-466E-A967-E766D6AD799B@joelrichard.com>
[Please don't top post as it makes the discussion more difficult to
follow.]
On Aug 27, 2007, at 12:34 , Joel Richard wrote:
>
> On Aug 27, 2007, at 12:51 PM, D'Arcy J.M. Cain wrote:
>
>> On Mon, 27 Aug 2007 18:36:47 +0200
>> Claudia Kosny <ckosny@gmx.net> wrote:
>>> I have a list of events that take place in a certain city at a
>>> certain
>>> date. Now I would like to have the first two (ordered by date)
>>> events
>>> for each city.
>>>
>>> Is there a way to do this with one query?
>>> I am using PostgreSQL 7.4.
>>
>> I believe you are looking for the LIMIT keyword. Check the docs
>> on the
>> web site.
> That's what I thought at first, but this is not the case. She's
> looking for the first two dates in -each- city in the table. I
> initially thought that this could be accomplished with GROUP BY and
> LIMIT, but GROUP BY can only give you the first date for each city,
> not the first two dates for each city.
>
> So far, I haven't come up with any clever ideas. I'm not sure this
> can be done in SQL.
>
> --Joel
>
I can't think of an easy way to do it, but certainly can do it in SQL
using correlated subqueries, something like
select city, event, event_date, (
select count(event)
from events i
where i.city = o.city
and i.event_date < o.event_date
and event_date > current_date -- make sure they're future
events
) as nearness_rank
from events o
where event_date > current_date -- make sure they're future events
having nearness_rank <= 1;
Note that this can potentially show more than 2 events if the most
recent upcoming events "tie" (have the same event_date).
Michael Glaesemann
grzm seespotcode net
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: grzm@seespotcode.net, postgres@joelrichard.com, darcy@druid.net, ckosny@gmx.net
Subject: Re: fetch first rows of grouped data
In-Reply-To: <60F656A0-805D-4C3B-BCA5-742AC6C866E0@seespotcode.net>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox