X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id CB7C952ABE for ; Wed, 13 Jul 2005 13:06:53 -0300 (ADT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 78829-09 for ; Wed, 13 Jul 2005 16:06:43 +0000 (GMT) Received: from mail9.atl.registeredsite.com (mail9.atl.registeredsite.com [64.224.219.83]) by svr1.postgresql.org (Postfix) with ESMTP id 4DE5C52BC7 for ; Wed, 13 Jul 2005 13:06:37 -0300 (ADT) Received: from hallsofworlds.com (ws0379.otak.com [216.122.57.125] (may be forged)) by mail9.atl.registeredsite.com (8.12.11/8.12.8) with ESMTP id j6DG6a8A027378 for ; Wed, 13 Jul 2005 16:06:36 GMT Received: from localhost (david@localhost) by hallsofworlds.com (8.11.6/8.11.0) with ESMTP id j6DG6Za34385 for ; Wed, 13 Jul 2005 16:06:35 GMT (envelope-from david@blankley.com) Date: Wed, 13 Jul 2005 16:06:35 +0000 (GMT) From: David Blankley X-X-Sender: david@hallsofworlds.com To: pgsql-sql@postgresql.org Subject: Re: Dynamic Offset Determination Message-ID: <20050713160327.H33783-100000@hallsofworlds.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0.05 tagged_above=0 required=5 tests=FORGED_RCVD_HELO X-Spam-Level: X-Archive-Number: 200507/115 X-Sequence-Number: 22093 I came up with a clever solution to this myself... I know the determined value for my CriteriaCol, so I can simply get the count of all the rows with criteria <= my value... SELECT count(*) FROM foo WHERE CriteriaCol<=constraint ORDER BY OrderCol; Thanks, Dave ----------------------------------- Problem Statement: I want to return n rows from a table. These n rows are relative to an offset. The part I can't figure out: The offset needs to be determined from values in the rows. Example: Given a table foo: CriteriaCol integer OrderedCol integer I can figure out the number of rows SELECT COUNT(CriteriaCol) FROM foo; How do I determine the offset? SELECT {rownum?} FROM foo WHERE CriteriaCol = SomeValidValue; With the rownum I can then determine the rows I want. SELECT * FROM foo ORDER BY OrderedCol LIMIT 21 OFFSET (rownum-10); Don't worry about boundary conditions, functions, etc, I can sort that out once I know how to get the offset. -------------------------- Searching the forums, the one potential hack I've found is: Quote from: http://archives.postgresql.org/pgsql-sql/2003-04/msg00287.php create temp sequence foo; select nextval('foo'), * from (select ... whatever ... order by something) ss; drop sequence foo; Presumably I would get my ordinal value from the sequence before dropping it. This seems like it would be a potentially slow process. Also, this solution dates to 2003, so I thought it worth asking in case a better solution has come along. Thanks for suggestions/solutions Dave