样本有点问题, 直接拿查询结果作 subquery
CREATE TABLE #Temp (partNO nvarchar(50), PARAMETER_NAME nvarchar(50),
Numerical float, [Date] datetime);
GO
INSERT INTO #Temp VALUES
('物料1', '铁', 0.001685269, '2018/3/1')
, ('物料1', '铁', null, '2018/4/1')
, ('物料1', '铁', null , '2018/5/1')
, ('物料1', '铁', 0.001604836, '2018/6/1')
Select partNO, PARAMETER_NAME
, case when Numerical is null
then (Select top 1 Numerical from #Temp T2 where
DateDiff(d, T2.Date, T1.Date)>0 and T2.Numerical is not null
order by date desc)
else Numerical end as [Numerical]
, [Date] from #Temp T1
结果会像这样
partNO PARAMETER_NAME Numerical Date
物料1 铁 0.001685269 2018-03-01 00:00:00.000
物料1 铁 0.001685269 2018-04-01 00:00:00.000
物料1 铁 0.001685269 2018-05-01 00:00:00.000
物料1 铁 0.001604836 2018-06-01 00:00:00.000
若确定期间一定有值的话,
改 subquery 判断式就可以了
※ 引述《carsun00 (永夜)》之铭言:
: 数据库名称:MS SQL
: 数据库版本:14.0.2014.14
: 内容/问题描述:
: 资料需求是本月的数据算不出结果(标准差),
: 自动加前一个月的数据,如果都没有继续往前追朔最多半年,
: SQL语法如下,目前只能计算出每个月的资料,
: 想到的解法是资料表内,
: 开一个字段储存查询的次数(1~6),
: 在使用While跑查询。
: 但这样会变成会可能须要查询六次,
: 不知道有没有比较好的处理方式。
: SELECT
: [PartNo]
: , [PARAMETER_NAME]
: , STDEV([Numerical])
: , CONVERT(CHAR(7), [DATE], 120) AS '月分组'
: FROM
: [dbo].[SAMPLES_Numerical]
: GROUP BY
: [PartNo]
: , [Numerical]
: , CONVERT(CHAR(7), [DATE], 120);
: 谢谢协助m(_ _)m。
: OS:觉得功力薄弱...
: 有点想去上MSSA的70-761..
: 原始资料
: partNO PARAMETER_NAME Numerical DATE
: 物料1 铁 25 2018/3/1
: 物料1 铁 0.1 2018/3/1
: 物料1 铁 0.56 2018/4/11
: 物料1 铁 10 2018/5/12
: 物料1 铁 10 2018/6/25
: 物料1 铁 10 2018/7/30
: 目前sql查询结果
: 物料1 铁 0.001685269 3月
: 物料1 铁 null 4月
: 物料1 铁 null 5月
: 物料1 铁 0.001604836 6月
: 期望结果
: 物料1 铁 0.001685269 3月
: 物料1 铁 0.001685269 4月 3月&4月计算结果
: 物料1 铁 0.001685269 5月 4月%5月计算结果
: 物料1 铁 0.001604836 6月 6月