Re: [SQL] Finding the "most recent" rows

From: Chairudin Sentosa <chairudin(at)prima(dot)net(dot)id>
To: Brook Milligan <brook(at)trillium(dot)NMSU(dot)Edu>
Cc: jas1(at)scigen(dot)co(dot)uk, pgsql-sql(at)postgreSQL(dot)org
Subject: Re: [SQL] Finding the "most recent" rows
Date: 1999-04-23 08:30:05
Message-ID: 37202F8D.B9479A67@prima.net.id
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Your script doesn't show how to get the "most recent" rows.
The output from the 1st SQL is :
id|customer|order_no
--+--------+--------
1| 1| 1
2| 1| 2
3| 1| 3
4| 2| 1
5| 2| 2
6| 3| 1

The output from the 2nd SQL is:
id|customer|order_no
--+--------+--------
2| 1| 2
5| 2| 2
6| 3| 1

What are you trying to show here?

I think you could just select the highest id, which means the latest data input.

Regards,
Chai

Brook Milligan wrote:

> I'd like an efficient way to pull out the most recent row (i.e. highest
> datatime) belonging to *each* of a number of places selected by a simple
> query.
>
> The "Practical SQL Handbook" has a description of exactly what you are
> looking for (don't have it handy or I'd give you the page number).
> They discuss two ways to do it. One uses the HAVING clause with GROUP
> BY (I think that is the section of the book to look in), but I don't
> think psql supports this. The other way uses a subselect which is
> supported by psql.
>
> The script at the bottom illustrates some of the ideas.
>
> Cheers,
> Brook
>
> ===========================================================================
> /* -*- C -*-
> * recent.sql
> */
>
> /*
> * find the most recent entry (order) for each group (customer)
> */
>
> -- create tables
>
> drop sequence invoices_id_seq;
> drop table invoices;
> create table invoices
> (
> id serial,
> customer int,
> order_no int,
>
> unique (customer, order_no)
> );
>
> insert into invoices (customer, order_no) values (1, 1);
> insert into invoices (customer, order_no) values (1, 2);
> insert into invoices (customer, order_no) values (1, 3);
> insert into invoices (customer, order_no) values (2, 1);
> insert into invoices (customer, order_no) values (2, 2);
> insert into invoices (customer, order_no) values (3, 1);
>
> select * from invoices order by customer, order_no;
>
> select * from invoices r
> where order_no = (select max (order_no) from invoices r2 where r.customer = r2.customer and order_no < 3)
> order by r.customer, r.order_no;

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Chairudin Sentosa 1999-04-23 08:34:42 Re: [SQL] Finding the "most recent" rows
Previous Message Thomas Lockhart 1999-04-23 05:21:33 Re: [INTERFACES] where did that date and time come from??