Subject | Random multirow select, and RAND() alternative? |
---|---|
Author | rbd523 |
Post date | 2004-07-08T13:07:26Z |
Hey guys,
First issue, it seems that FB 1.5.x doesn't have a RAND() function
(??). I've read around and seen things that mention IB 5 having one
(but it being broken). Basically I need one though...does anyone
have a good UDF that emulates the RAND functionality? (returns a
random number between two bounds)
Secondly, I was looking into ways on _efficiently_ doing a multi-row
select of NON-REPEATED "random" rows, for a given search criteria. I
would like to do it all within PSQL (stored procedure). I've
explored several options, like a stored procedure using a FOR
SELECT ... DO construct (but that is row-by-row it seems), using
cursors, etc. But these are mostly row-by-row random options, and
with those, making sure a given randomly selected row isn't selected
twice seems difficult.
At this point I think the simplest way would be to do something like
the following:
SELECT DISTINCT * FROM footable WHERE ..... ORDER BY RAND()
that ORDER BY RAND()/NEWID() construct works in other DBs (like MS
SQL server, etc), but I don't know if it works in FB yet.
Any ideas or guidance in this area would be welcome!
Robby
(I had posted this in firebird-general initially as off-topic.
Lesson to me to not post when I can hardly keep my eyes open. Sorry
about that. :)
First issue, it seems that FB 1.5.x doesn't have a RAND() function
(??). I've read around and seen things that mention IB 5 having one
(but it being broken). Basically I need one though...does anyone
have a good UDF that emulates the RAND functionality? (returns a
random number between two bounds)
Secondly, I was looking into ways on _efficiently_ doing a multi-row
select of NON-REPEATED "random" rows, for a given search criteria. I
would like to do it all within PSQL (stored procedure). I've
explored several options, like a stored procedure using a FOR
SELECT ... DO construct (but that is row-by-row it seems), using
cursors, etc. But these are mostly row-by-row random options, and
with those, making sure a given randomly selected row isn't selected
twice seems difficult.
At this point I think the simplest way would be to do something like
the following:
SELECT DISTINCT * FROM footable WHERE ..... ORDER BY RAND()
that ORDER BY RAND()/NEWID() construct works in other DBs (like MS
SQL server, etc), but I don't know if it works in FB yet.
Any ideas or guidance in this area would be welcome!
Robby
(I had posted this in firebird-general initially as off-topic.
Lesson to me to not post when I can hardly keep my eyes open. Sorry
about that. :)