2016-04-11 15 views
-1

に基づいてSQLで数字の現実的なシーケンスを生成します我々は私はとても最新<code>PRICEDATE</code>と今日の間、毎日の行を作成するために<code>CTE</code>を作成してい<code>PRICEDATE</code>と<code>UNITPRICE</code></p> <p>を保持するテーブルを持っているランダム床/天井

私は出発点として、最新のUNITPRICEを取った後、次の行のUNITPRICE乱数となるとすることで「現実的な」価格を生成したいと思います(これはデモシステムである)のデモデータを持つテーブルを移入できること前のUNITPRICEは特定のamounによって上下していますt

たとえば、最新のUNITPRICEは1.45678です。したがって、前の値(1.45678)をとり、-0.05と0.05の間の任意の値にすることで、次の行の乱数を生成したいと思います最後のもの(1.40678と1.50678)。後続の各行は、最後の行のランダムな偏差(-0.05〜0.05)です。

答えて

3

あなたは再帰CTEでこれを行うことができます。

with p as (
     select @PriceDate as pricedate, @UnitPrice as price 
     union all 
     select dateadd(day, 1, pricedate), 
      price + 0.05 - rand(checksum(newid()))*0.1 
     from p 
     where dateadd(day, 1, pricedate) <= @EndDate 
    ) 
select * 
from p 
OPTION (MAXRECURSION 0); 

私はあなたが最初の番号を提供したい正確にどのようにわからないので、私は初期値を持つ変数用のプレースホルダを置きます。

編集:私の質問を反映するために修正0.5から0.05。マイク。

+1

この再帰的なCTEが100を超える値を生成する場合は、 'MAXRECURSION'オプションを設定する必要があります。 –

+0

優秀なポイントエド、ありがとう。私はCTEの終わりに 'OPTION(MAXRECURSION 0)'を持っていました – Mike

関連する問題

 関連する問題