Teradata
在 Teradata SQL 中,如何從欄位/列中獲取一對之間的隨機數?
我最近在 Teradata 中遇到了一個簡單的問題:如何在來自欄位/列的一對數字之間獲取隨機數?
函式 RANDOM( lower_bound , upper_bound ) 顯然僅限於接受修復號而不是欄位/列名。
--THIS ONE FAILS: WITH TRIAL(CATEGORY, VAL_MIN, VAL_MAX) AS ( SELECT 'A', 0, 3 FROM CTE UNION ALL SELECT 'B', 1, 9 FROM CTE UNION ALL SELECT 'C', 2, 5 FROM CTE UNION ALL SELECT 'D', 1, 12 FROM CTE ), CTE(DUMMY) AS (SELECT 'X') SELECT T.*, RANDOM(T.VAL_MIN, T.VAL_MIN) --HERE'S THE PROBLEM FROM TRIAL T; --THIS ONE WORKS: WITH TRIAL(CATEGORY, VAL_MIN, VAL_MAX) AS ( SELECT 'A', 0, 3 FROM CTE UNION ALL SELECT 'B', 1, 9 FROM CTE UNION ALL SELECT 'C', 2, 5 FROM CTE UNION ALL SELECT 'D', 1, 12 FROM CTE ), CTE(DUMMY) AS (SELECT 'X') SELECT T.*, RANDOM(1, 7) --HERE'S THE PROBLEM FROM TRIAL T;
我很確定有一個簡單的解決方案。非常感謝任何幫助。
這將返回請求範圍內的數字:
RANDOM(0, 2147483647) mod (T.VAL_MAX - T.VAL_MIN +1 ) + T.VAL_MIN
但是由於 MOD,可能會對較低的數字產生最小的偏差,例如,對於 1-3,您會得到以下機率:
1,2 = 715,827,883 / 2,147,483,648 3 = 715,827,882 / 2,147,483,648