22,209
社区成员
发帖
与我相关
我的任务
分享
SELECT *
FROM tb A
CROSS APPLY(
SELECT SQRT( SUM(V) ) as 计算当量
FROM(
SELECT TOP(12)
POWER(B.当量 - AVG(B.当量)OVER(ORDER BY GETDATE()), 2) as v
FROM tb B
WHERE B.观测站名称 = A.观测站名称 AND B.行驶方向 = A.行驶方向
AND( -- t 时段之前n(n=12)个数据, 这个判断你自己再确定
B.观测日期 < A.观测日期
OR B.观测日期 = A.观测日期 AND B.小时 < A.小时
OR B.观测日期 = A.观测日期 AND B.小时 = A.小时 AND B.分钟 < A.分钟
)
ORDER BY B.观测日期 DESC, B.小时 DESC, B.分钟 DESC
) TOP12
) V
WHERE 条件
SELECT *
FROM tb A
CROSS APPLY(
SELECT SQRT( (
POWER([1]-pavg.v,2) + POWER([2]-pavg.v,2) + POWER([3]-pavg.v,2) + POWER([4]-pavg.v,2) +
POWER([5]-pavg.v,2) + POWER([6]-pavg.v,2) + POWER([7]-pavg.v,2) + POWER([8]-pavg.v,2) +
POWER([0]-pavg.v,2) + POWER([10]-pavg.v,2) + POWER([11]-pavg.v,2) + POWER([12]-pavg.v,2)
)/12) as 计算当量
FROM(
SELECT TOP(12)
当量, ROW_NUMBER()OVER(ORDER BY B.观测日期 DESC, B.小时 DESC, B.分钟 DESC) as _r
FROM tb B
WHERE B.观测站名称 = A.观测站名称 AND B.行驶方向 = A.行驶方向
AND( -- t 时段之前n(n=12)个数据, 这个判断你自己再确定
B.观测日期 < A.观测日期
OR B.观测日期 = A.观测日期 AND B.小时 < A.小时
OR B.观测日期 = A.观测日期 AND B.小时 = A.小时 AND B.分钟 < A.分钟
)
ORDER BY B.观测日期 DESC, B.小时 DESC, B.分钟 DESC
) TOP12
PIVOT( MAX(TOP12.当量) FOR _r IN([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) )p
CROSS APPLY(SELECT ([1]+[2]+[3]+[4]+[5]+[6]+[7]+[8]+[9]+[10]+[11]+[12])/12.) pavg(v) -- 平均值
) V
WHERE 条件