Re: MSAccess-like Last() with sorting before grouping - Mailing list pgsql-novice

From Jeff Eckermann
Subject Re: MSAccess-like Last() with sorting before grouping
Date
Msg-id 20030516195929.40622.qmail@web20810.mail.yahoo.com
Whole thread Raw
In response to MSAccess-like Last() with sorting before grouping  ("Octavio Alvarez" <alvarezp@octavio.ods.org>)
Responses Re: MSAccess-like Last() with sorting before grouping
List pgsql-novice
"Last" is very non-portable, as you have found out.
You can do this fairly easily in PostgreSQL with
another non-portable syntax, SELECT DISTINCT ON ...

In this case, you want:

SELECT DISTINCT ON (group_key) id, group_key,
sort_key, data
FROM table
ORDER BY sort_key DESC;

You can also do this with subselects, but it's pretty
ugly...

--- Octavio Alvarez <alvarezp@octavio.ods.org> wrote:
>
> Hello! This is my first post to the list. I hope I'm
> not just blanked out,
> and asking a question with a simple answer. ;-)
>
> I need a query to return the last value of a set of
> grouped-by records
> when a column is sorted. For example:
>
> TABLE: (
>   id         integer UNIQUE,
>   group_key  integer,
>   sort_key   integer,
>   data       integer
> )
>
> Say it has the following rows:
>
>  id | group_key | sort_key | data
> ----+-----------+----------+------
>   1 |         1 |        1 |    1
>   2 |         1 |        2 |    6
>   3 |         1 |        5 |    6
>   4 |         1 |        9 |    2
>   5 |         2 |        3 |    1
>   6 |         2 |        4 |    3
>   7 |         2 |        7 |    3
>   8 |         3 |        6 |    5
>   9 |         3 |        3 |    4
> (9 rows)
>
> I need it to have the following output:
>
>  id | group_key | sort_key | data
> ----+-----------+----------+------
>   4 |         1 |        9 |    2
>   7 |         2 |        7 |    3
>   8 |         3 |        6 |    5
>
> Which is, selecting the top value from sort_key from
> each different set of
> group_key. I can't program a last() function because
> it wouldn't work for
> group_key=3 in the example. ORDER BY always sorts
> the results after the
> grouping. I tried min/max functions but they apply
> to each column
> individually.
>
> Is there any way I can ask for this info to the SQL
> server?
>
> Thank you very much.
>
> --
> Octavio Alvarez Piza.
> E-mail: alvarezp@octavio.ods.org
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster


__________________________________
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.
http://search.yahoo.com

pgsql-novice by date:

Previous
From: dario billo
Date:
Subject: \copy command
Next
From: Jeff Eckermann
Date:
Subject: Re: Copy command (bug??)