Re: How to get the latest record from the database

Fabien Roy <[email protected]> Mon, 21 Jun 2004 10:25:06 -0700
Newsgroups gmane.comp.web.webobjects.eof,gmane.comp.web.webobjects.devel
Message-ID <[email protected]>
Hi Stefan,

As some others have shown you some solution, I will tell you the 
fastest and scalable (IMHO) technique for retrieving the info that you 
need.
Assuming that the rate of insert is low, this solution that involve an 
auxiliary table an a trigger.
What you need is a table with the user id and the id of the latest 
record for that user.
Using a trigger is the most efficient but the application could also 
maintain that table at the expense of enclosing the insert in the main 
table and the update of that auxiliary table enclosed in a transaction.

advantages: fast (fewer round trip to the database, select max(column) 
will always involve sorting at the database engine and this could slow 
down in the case of large data-set, the auxiliary table is fairly small 
(one row per user).

This technique of using aggregate table maintained by triggers seems to 
be the fastest solution specially for large data-sets.

Hope that helps.

Fabien
On Jun 21, 2004, at 9:14 AM, Stefan Apelt wrote:

> Hi,
>
> sorry for the crosspost, I am not sure how many people are reading the
> eof-list.  My problem is as follows: I have a long list of records for
> user actions, simplified like this:
>
>   time      user             action
>
>   18:12    user foo         opened document
>   18:12    user bar         pasted paragraph
>   18:13    user foo         opened another document
>
> The  problem is that there are a lot of these entries in the database.
> Now  I  want  to specify a user and get only the latest entry for that
> user  (the one with the highest timestamp). The latest timestamp could
> also  be  some  time  in the past so I cannot compare with the current
> time.
>
> My  solution 'til now would be to fetch all records for the user, sort
> them  by  time and return the first (or last) element in the resulting
> array.  However,  since  there  can be literally thousands of records,
> this is going to be slow.
>
> Does  anyone  have  a better idea to produce SQL for only fetching the
> one record in question? I would be very grateful for that!
>
> -- 
> Cheers,
>  Stefan
>
>
>
>
> _______________________________________________
> EOF mailing list
> [email protected]
> http://www.omnigroup.com/mailman/listinfo/eof