[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 <[EMAIL PROTECTED]> 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



---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to