【发布时间】:2021-10-28 09:01:00
【问题描述】:
我不确定这会被称为什么,因为搜索“移动平均线”一词并没有产生我想要做的事情......
我在 MSSQL 中有一个表,其中包含一系列天气观察结果,这些观察结果是不定期进行的。
我想在 SQL 中创建一个存储过程,它将时间作为输入变量,然后选择最近的观察前后,并计算该输入时间的测量值的近似值并返回这些值。
我知道我可以创建 2 行的平均值,但如果我输入 07:24 的时间并且在 07:25 进行观察,则测量值将比平均值更接近记录值。
在我的脑海中,我想我知道该怎么做,但它很乱:-
- 计算测量时间之间的差异(分钟/整数)
- 计算测量值之间的差异 (int/float)
- 除以时间/值以给出每分钟的测量值
- 计算最早时间和输入变量(分钟/整数)之间的差异
- 将每分钟的测量值乘以输入 var 差异 (int/float)
- 将上述步骤中的值添加到最早的时间测量变量以生成返回值
所以我担心的是:
- 这对于 SQL 来说是不是太高级或太复杂了?
- 如果不是,会不会是一个很长很乱的存储过程?
我不是在找人为我做,我想学习,任何指针、建议、重复的帖子或示例代码 sn-ps 都会受到极大的欢迎和研究。
【问题讨论】:
-
如果您添加一些示例数据和所需的输出会很好。根据您的描述,您似乎需要使用 LAG/LEAD 功能
-
我添加了我的天气表的屏幕截图。选择前后行没有问题,我通过嵌入式查询和 UNION 完成了这一点。我正在寻找更多关于查询计算方面的建议和指导
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
人们想要它作为文本的原因是因为它更容易复制到像dbfiddle.uk 这样的工具中。图片意味着它需要手动输入,如果数据量很大,没人会打扰
标签: sql-server stored-procedures