我在greenplum中获取了一个数据集(运行postgresql sql语法)并且需要添加一个日期类型值的列(对于SAS,但我们不能使用SAS数据步骤),其中包含三个日期:20170101,20170601,20171101以及其中每个所有行的1/3的值。
以下是一种随机分配值的方法:
select (case row_number() over (order by random()) % 3
when 0 then '2017-01-01'::date
when 1 then '2017-06-01'::date
when 2 then '2017-11-01'::date
end) as dte
from t;
注意:简单地运行会更快:
select (case (random() * 3)::int
when 0 then '2017-01-01'::date
when 1 then '2017-06-01'::date
when 2 then '2017-11-01'::date
end) as dte
from t;
但是,使用row_number()
可以保证三个日期之间的平衡(尽可能在给定行数的情况下尽可能接近)。