November 26, 2008 at 8:48 am
Comments posted to this topic are about the item random integer number scalar function
November 26, 2008 at 10:00 pm
Ummm... good idea and nice try... but doesn't work to create different random numbers within the same Select. For example, using the eample Select you have with your code....
select dbo.fx_getrandomnumber(500, 300, rand())
FROM dbo.Tally
WHERE N <= 10
... will return 10 identical numbers.
--Jeff Moden
Change is inevitable... Change for the better is not.
November 26, 2008 at 10:09 pm
Here's a "fix" for your code... doesn't change a thing in the code... just the way the "seed" for the RAND function works...
select dbo.fx_getrandomnumber(500, 300, rand(CHECKSUM(NEWID())))
FROM dbo.Tally
WHERE N <= 10
That will randomly generate 10 "different" integers with the understanding that it's the nature of random numbers to occasionally be duplicate in any set of random numbers.
If I may suggest, if you need to write that much code to use a function, you may want to consider not even using a function. Just do it "inline".
SELECT ABS(CHECKSUM(NEWID()))%(500-300+1)+300
FROM dbo.Tally
WHERE N <= 10
--Jeff Moden
Change is inevitable... Change for the better is not.
November 28, 2008 at 7:12 am
thanks thats a useful technique!
November 28, 2008 at 7:38 am
Now this is interesting. Watch what happens when you try to find out how many of those random integers are randomly repeated:
SELECT Number, COUNT(*)
FROM (SELECT ABS(CHECKSUM(NEWID()))%(500-300+1)+300 AS Number
FROM dbo.Numbers
WHERE number <= 200
) d
GROUP BY Number
ORDER BY Number
😀
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
November 28, 2008 at 7:54 am
That's about what I would expect from an almost real set of random numbers.
--Jeff Moden
Change is inevitable... Change for the better is not.
November 28, 2008 at 7:57 am
Jeff Moden (11/28/2008)
That's about what I would expect from an almost real set of random numbers.
You mean almost reel, right? 😛
-- did you catch the dupes?
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
November 28, 2008 at 8:03 am
Jeff Moden (11/28/2008)
That's about what I would expect from an almost real set of random numbers.
Sorry Jeff, should have explained more:
SELECT Number, COUNT(*) as NumberCount
FROM (SELECT ABS(CHECKSUM(NEWID()))%(500-300+1)+300 AS Number
FROM dbo.Numbers
WHERE number <= 200
) d
GROUP BY Number
ORDER BY Number
Some results:
Number NumberCount
----------- -----------
300 1
303 1
303 1
305 2
307 3
307 3
307 1
309 2
SELECT Number, SUM(NumberCount), count(*)
FROM (SELECT Number, COUNT(*) as NumberCount
FROM (SELECT ABS(CHECKSUM(NEWID()))%(500-300+1)+300 AS Number
FROM dbo.Numbers
WHERE number <= 200
) d
GROUP BY Number
) d2
GROUP BY Number
ORDER BY Number
Some results:
Number
----------- ----------- -----------
301 4 3
304 1 1
307 2 2
308 1 1
309 1 1
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
November 28, 2008 at 3:44 pm
Chris Morris (11/28/2008)
Jeff Moden (11/28/2008)
That's about what I would expect from an almost real set of random numbers.You mean almost reel, right? 😛
-- did you catch the dupes?
Yep... and the dupes are appropriate for such a small set of random numbers. Consider the simplest of all random number systems... Black and Red spots (with the occasional Green spot or spots) on a Roulette wheel... what would you guess would be the maximum number of times that, say, Black would show up consecutively?
--Jeff Moden
Change is inevitable... Change for the better is not.
November 28, 2008 at 5:18 pm
Yeah, but he's getting dupes, even from the Group By categories, Jeff.
Chris: FWIW, I am not seeing this on my Laptop.
[font="Times New Roman"]-- RBarryYoung[/font], [font="Times New Roman"] (302)375-0451[/font] blog: MovingSQL.com, Twitter: @RBarryYoung[font="Arial Black"]
Proactive Performance Solutions, Inc. [/font][font="Verdana"] "Performance is our middle name."[/font]
November 28, 2008 at 5:53 pm
Dang... I missed that... was looking at the wrong column for "dupes".
--Jeff Moden
Change is inevitable... Change for the better is not.
November 28, 2008 at 6:22 pm
Chris, I've created a Numbers table with the same column name as you (Number), and I cannot get the code to fail the same way as you have with the dupes and all.
What version of SQL Server do you have and are you using either QA or SMS for the interface? I've seen the Oracle version of TOAD produce such things, but never QA or SMS. Also, single or multi CPU on your box?
--Jeff Moden
Change is inevitable... Change for the better is not.
November 29, 2008 at 3:24 am
Jeff Moden (11/28/2008)
Chris, I've created a Numbers table with the same column name as you (Number), and I cannot get the code to fail the same way as you have with the dupes and all.What version of SQL Server do you have and are you using either QA or SMS for the interface? I've seen the Oracle version of TOAD produce such things, but never QA or SMS. Also, single or multi CPU on your box?
It doesn't happen on the 2k5 box, only on the 2k box queried from either QA or SMS. Version is 8.00.760 (SP3) and it's dual-processor.
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
November 29, 2008 at 6:59 am
I've not seen such a thing... perhaps try using MaxDop 1 just to see if parallelism is getting to it? I'd try it on a multi-processor box if I had access to one, but I don't so I can't hammer it out on this end. Sorry.
--Jeff Moden
Change is inevitable... Change for the better is not.
November 29, 2008 at 9:04 am
Huhn, the bug happens on my last remaining SQL 2000 server also. MAXDOP has no effect on it.
[font="Times New Roman"]-- RBarryYoung[/font], [font="Times New Roman"] (302)375-0451[/font] blog: MovingSQL.com, Twitter: @RBarryYoung[font="Arial Black"]
Proactive Performance Solutions, Inc. [/font][font="Verdana"] "Performance is our middle name."[/font]
Viewing 15 posts - 1 through 15 (of 26 total)
You must be logged in to reply to this topic. Login to reply