X-Original-To: pgsql-sql@postgresql.org Received: from localhost (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id C492F475CB4 for ; Wed, 12 Feb 2003 14:21:15 -0500 (EST) Received: from exchange.hq.openratings.com (unknown [141.149.165.226]) by postgresql.org (Postfix) with ESMTP id 0DF5D475B99 for ; Wed, 12 Feb 2003 14:21:10 -0500 (EST) Received: from openratings.com (cancun.hq.openratings.com [10.0.0.225]) by exchange.hq.openratings.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) id DQJTWNDB; Wed, 12 Feb 2003 14:21:10 -0500 Message-ID: <3E4AB5C4.4040105@openratings.com> Date: Wed, 12 Feb 2003 15:59:48 -0500 From: Dmitry Tkach User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Nicholas Allen Cc: pgsql-sql@postgresql.org Subject: Re: How do you select from a table until a condition is met? References: <200302121910.38232.nallen@freenet.co.uk> <3E4AB0E7.3010101@openratings.com> <200302122010.15297.nallen@freenet.co.uk> In-Reply-To: <200302122010.15297.nallen@freenet.co.uk> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: by AMaViS new-20020517 X-Archive-Number: 200302/247 X-Sequence-Number: 11645 Nicholas Allen wrote: >Thanks, but I don't think thats what I want. Basically I need to get the row >offset of a record (ie row) in a result set returned from the database. I >know all the details of the row in question but when the search order changes >I need to know the new index the row will have. > >In other words, I was hoping I would be able to select upto a particular row >(not knowing its offset but knowing everything else about it) in a select >query. > >Ideally I could do something like SELECT count(*) UNTIL col1=value1 && >col2=val2 etc.... > >Of course there is no UNTIL in a select statement just a WHERE clause. > >I know I didn't explain that very well! > >Well I hope you can still help? > I still don't understand what it is you are trying to do... Perhaps, an example would help... Suppose you have a table like this: create table people ( id serial primary key, first_name text, last_name text ); Now, suppose, the user gets the list of people, ordered by the last_name, scrolls through, say, 100 of them, and then switches the order to sort by the first_name... Are you saying that in this case you want to start with the 101st entry in the first name order? It makes little sense to me (the entries you are going to skip have nothing to do with the ones the user already saw - so, I can't imagine the reason not to just start with the first entry, using the new sort order)... And you can still do it with the offsets: select * from people order by last_name limit 10; ... select * from people order by last_name offset 90 limit 10; ... select * from people order by first_name offset 100 limit 10; This will still work... But I doubt that's what you want... I must be missing something... Dima