sql - SQL Server - 生成 MAX - MIN = 参数的 6 个浮点值
问题描述
我需要以最佳方式和性能生成 6 个浮点值,其中 1 个小数:
MAX(value) - MIN(value) = @parameter
我有这个代码:
BEGIN
DECLARE @parameter float = 0.6
WHILE @validated = 0
BEGIN
IF @count < 6
BEGIN -- fill table with 6 random values from 0 to 2 (with 1 decimal)
INSERT INTO @tempdata ([value])
SELECT ROUND(RAND()*(2-0),1);
SET @count = @count + 1
END
IF @count = 6 -- if temp table has 6 values then do the validation
BEGIN
SELECT @result = (MAX(value) - MIN(value)) FROM @tempdata
IF(@result = @parameter)
BEGIN
PRINT 'MATCH PARAMETER'
SET @validated = 1
END
ELSE
BEGIN
DELETE @tempdata
SET @counter = 0
END
END
END
END
这是可行的,但有时需要 10 或 20 秒,而且应该更快。
例如,如果@parameter
值为:0.8,那么我们需要6 个介于0和2之间的数字,其中 MAX - MIN 匹配,例如:
0.7
1.1
0.6
0.9
1.5
1.2
MAX(1.5) - MIN(0.7) = 0.8
有什么线索吗?
解决方案
with randvals(rval) as
(
select rand()
union all
select rand()
union all
select rand()
union all
select rand()
union all
select rand()
union all
select rand()
),
arandvals(rval, xrval, mrval) as
(
select rval, max(rval) over() as xrval, min(rval) over() as mrval
from randvals
)
select cast(0.8 * rval / (xrval - mrval) as numeric(3,2))
from arandvals
推荐阅读
- python - 通过 dict.get() 调用函数
- javascript - 从谷歌表格数据创建事件时间线
- scala - 如何在 apache spark 2.3 中覆盖分区,同时仍使用 insertInto 方法写入镶木地板
- r - R:data.table 在使用连接分配时将值分配给错误的表
- django - Django modelForm 没有将文件保存到数据库
- java - 我如何创建一个使用摇摆计数的计时器
- amazon-web-services - 如何使用 aws cli 获取最新版本的 s3 对象?
- kubernetes - 无法使用 Kapacitor 自动缩放 K8s pod
- spring - Spring Batch & Spring Integration (JMS) & Load Balance Slaves
- excel - 将打开的文件名添加到新工作簿中的单元格,以便我可以将其用作标题并使用文件 1 和文件 2 来命名我新添加的工作簿