基于随机楼层/天花板在SQL中生成逼真的数字序列

时间:2016-04-11 14:29:41

标签: sql sql-server sql-server-2008 random

我有一个包含PRICEDATEUNITPRICE

的表格

我正在创建一个CTE来为最新的PRICEDATE和今天之间的每一天创建一行,以便我们可以使用演示数据填充表格(这是一个演示系统)

我想以最新的UNITPRICE作为起点,然后生成“真实的”#39;通过将下一行的UNITPRICE作为一个随机数,即之前的UNITPRICE向上或向下一定数量来计算价格

例如:最新的UNITPRICE是1.45678,所以我想通过获取前一个值(1.45678)并创建一个可以介于两者之间的任何位置的新数字来为下一行生成一个随机数 - 从最后一个(1.40678和1.50678)0.05和0.05。每个后续行是最后一行的随机偏差(-0.05到0.05)。

1 个答案:

答案 0 :(得分: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以反映我的问题。麦克