Re: [GENERAL] returning row numbers in select

2004-03-15 Thread Steve Crawford
On Wednesday 10 March 2004 12:25 pm, Randall Skelton wrote:
 Is there a way to return an integer row number for a query?  Note
 that there may be a large number of rows so I would rather not have
 joined selects...
snip

Well...if your result has a unique column you can do something like 
this:

steve=# select (select count(*) from bar as barcount where 
barcount.sec=bar.sec) as rownum, sec from bar order by sec;

 rownum |sec
+
  1 | 1063966688
  2 | 1063966689
  3 | 1063966690
  4 | 1063966691
  5 | 1063966692
  6 | 1063966693
  7 | 1063966694
  8 | 1063966695
  9 | 1063966696
 10 | 1063966697
 11 | 1063966698
 12 | 1063966699
 13 | 1063966700
 14 | 1063966701
 15 | 1063966702
 16 | 1063966703
 17 | 1063966704
 18 | 1063966705

As you might guess, this is not a fast query - more of a brute-force 
kludge. It's likely that you will be better off postprocessing the 
query to select every n records or possibly writing a function that 
will handle the situation.

Cheers,
Steve


---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]


Re: [GENERAL] returning row numbers in select

2004-03-10 Thread Chris

 I to return a sequential row number beginning at 1?
 
 i.e.
 
 row| timestamp
 ---+
 1   2004-02-01 23:15:00.824-05
 2   2004-02-01 23:15:01.824-05
 3   2004-02-01 23:15:02.824-05
 ...
 
 My reason for wanting row numbers is so I can use a 'MOD(row_number, 
 n)' to get the nth row from the table.


Doesn't LIMIT and OFFSET do the job?
http://www.postgresql.org/docs/7.3/interactive/queries-limit.html


Bye, Chris.



---(end of broadcast)---
TIP 5: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faqs/FAQ.html


Re: [GENERAL] returning row numbers in select

2004-03-10 Thread Tom Lane
Randall Skelton [EMAIL PROTECTED] writes:
 Correction, I don't want to simply get the nth row, I want all rows 
 that are divisible by n.  Essentially, the timestamp is at a regular 
 interval and I want a way of selecting rows at different sampling 
 intervals.

Couldn't you code this as a WHERE test on the timestamp?

regards, tom lane

---(end of broadcast)---
TIP 4: Don't 'kill -9' the postmaster


Re: [GENERAL] returning row numbers in select

2004-03-10 Thread Bernard Clement

Maybe by using a sequence and a function.

The sequece to generate the row number.

The a function 
1) to reset the sequence and 
2) to perform a select with the first column nextval(seq) and the column the 
timestamp

However, I am a newbie with PostgreSQL and I am not sure it this will work 
correctly...you might have to play with it (or wait for somebody with more 
experience than me).

Bernard

On Wednesday 10 March 2004 16:23, Randall Skelton wrote:
  I to return a sequential row number beginning at 1?
 
  i.e.
 
  row| timestamp
  ---+
  1   2004-02-01 23:15:00.824-05
  2   2004-02-01 23:15:01.824-05
  3   2004-02-01 23:15:02.824-05
  ...
 
  My reason for wanting row numbers is so I can use a 'MOD(row_number,
  n)' to get the nth row from the table.

 Correction, I don't want to simply get the nth row, I want all rows
 that are divisible by n.  Essentially, the timestamp is at a regular
 interval and I want a way of selecting rows at different sampling
 intervals.

  Doesn't LIMIT and OFFSET do the job?
  http://www.postgresql.org/docs/7.3/interactive/queries-limit.html

 It would if I only wanted an offset butI want a query to return the
 first, fifth, and tenth, and so on row.  This would be 'MOD(row_num,
 5)' but given that I don't know the number of rows a priori, it is
 difficult to write a LIMIT.  Moreover, the offset doesn't make it easy
 to get the first row.  Unless, of course, I am missing something
 obvious?

 Cheers,
 Randall


 ---(end of broadcast)---
 TIP 2: you can get off all lists at once with the unregister command
 (send unregister YourEmailAddressHere to [EMAIL PROTECTED])


---(end of broadcast)---
TIP 8: explain analyze is your friend


Re: [GENERAL] returning row numbers in select

2004-03-10 Thread Tom Lane
Randall Skelton [EMAIL PROTECTED] writes:
 Couldn't you code this as a WHERE test on the timestamp?

 That would be ideal as it is theoretically possible for there to be 
 missing rows due to sampling errors; nevertheless, a WHERE test doesn't 
 seem obvious to me.  Can you please post an example?

Something like
WHERE (EXTRACT(EPOCH FROM timestamp)::numeric % 5) = 0;
The EXTRACT function returns double precision, but there's no double
modulo operator for some reason, hence the cast to numeric which does
have one.

regards, tom lane

---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]


Re: [GENERAL] returning row numbers in select

2004-03-10 Thread Bruno Wolff III
On Wed, Mar 10, 2004 at 17:25:49 -0500,
  Randall Skelton [EMAIL PROTECTED] wrote:
 
 That would be ideal as it is theoretically possible for there to be 
 missing rows due to sampling errors; nevertheless, a WHERE test doesn't 
 seem obvious to me.  Can you please post an example?  The time spacing 
 between rows is 1 second but I want my select statement to return rows 
 every 5 seconds (see marked lines below).  I've tried various interval 
 operations but I don't really understand how to relate the timestamp 
 and and the interval.

You could extract seconds from timestamp, cast to integer and apply
the mod function and test against whichever remainder you want.

---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]