gpt4 book ai didi

sql-server - MS SQL 2005 - 用线性插值替换空值

转载 作者:行者123 更新时间:2023-12-03 03:24:19 25 4
gpt4 key购买 nike

下面有一组数据,其中包含 MS SQL 2005 中的日期和值。某些日期的值为 NULL。使用线性插值填充空值的最佳方法是什么?

Date,ShortName,LongName,Value
12/31/2012,ABC,Test1,-4.0
12/31/2012,XYZ,Test2,-8.1
1/2/2013,ABC,Test1,NULL
1/2/2013,XYZ,Test2,NULL
1/3/2013,ABC,Test1,NULL
1/3/2013,XYZ,Test2,NULL
1/4/2013,ABC,Test1,-9.6
1/4/2013,XYZ,Test2,-13.0
1/7/2013,ABC,Test1,NULL
1/7/2013,XYZ,Test2,NULL
1/8/2013,ABC,Test1,NULL
1/8/2013,XYZ,Test2,NULL
1/9/2013,ABC,Test1,NULL
1/9/2013,XYZ,Test2,NULL
1/10/2013,ABC,Test1,NULL
1/10/2013,XYZ,Test2,NULL
1/11/2013,ABC,Test1,-7.1
1/11/2013,XYZ,Test2,-12.7

最佳答案

这是一种似乎给我带来不错结果的方法:

select *
from tests
where value is not null
union all
select t.Date
, t.ShortName
, t.LongName
, Value = p.Value + (n.Value - p.Value)
* (cast(datediff(dd, p.Date, t.Date) as decimal(16,1)))
/ (cast(datediff(dd, p.Date, n.Date) as decimal(16,1)))
from tests t
cross apply
(
select top 1 p.date, p.value
from tests p
where p.Value is not null
and t.shortname = p.shortname
and t.date > p.date
order by p.date desc
) p
cross apply
(
select top 1 n.date, n.value
from tests n
where n.Value is not null
and t.shortname = n.shortname
and t.date < n.date
order by n.date
) n
where t.Value is null
order by ShortName, Date

SQL Fiddle with demo .

另一个SQL Fiddle带有更多调试信息,即我使用的 x、x0、y 等值。

虽然您的数据没有周末,但我认为该行也包括周末。如果不是,我确信可以调整查询。

关于sql-server - MS SQL 2005 - 用线性插值替换空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16743713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com