[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