首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建滚动计算理论

如何创建滚动计算理论
EN

Stack Overflow用户
提问于 2018-03-31 10:43:19
回答 1查看 40关注 0票数 0

我正在研究这个提琴:http://sqlfiddle.com/#!18/2f822/1

它具有以下模式和插入:

代码语言:javascript
运行
复制
create table TVD(
  PK int
  , MSR int
  , MSR_PREV int
  , ST_MSR int
  , azi float
  , azi_prev float
  , incl float
  , incl_prev float
)

insert into TVD values
(1,0,0,0,0,0,0,0),
(2,100,0,0,2.11429185586593,0,0.00523598775598299,0),
(3,200,100,0,2.0612338466053,2.11429185586593,0.00366519142918809,0.00523598775598299),
(4,300,200,0,2.04028989558137,2.0612338466053,0.00174532925199433,0.00366519142918809),
(5,400,300,0,1.00478605037314,2.04028989558137,0.000872664625997165,0.00174532925199433)

前一列是其他列的逻辑上的“前一”值。例如,MSR_PREV是存储在MSR中的值的逻辑“先前”值。ST_MSR是MSR序列的第一个值。

我需要添加一个名为: TVD_VALUE的列。到目前为止,设计是一个未完成的case语句:

代码语言:javascript
运行
复制
case when MSR = MSR_PREV then MSR
     else <<PREVIOUS TVD_VALUE>>+((MSR-MSR_PREV)/2)*(COS(INCL_PREV)+COS(INCL))

如何获取前一个计算值来完成“下一条记录”的计算?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-03-31 12:44:10

如果我理解的话,你基本上是在运行你的表达式的总和。您可以使用OVER clause对前面所有行的表达式值求和。

代码语言:javascript
运行
复制
select sum((case when MSR = MSR_PREV then MSR else ((MSR-MSR_PREV)/2)*(COS(INCL_PREV)+COS(INCL)) end)) 
  over(order by MSR rows unbounded preceding) as TVD_VALUE
from TVD

|          TVD_VALUE |
|--------------------|
|                  0 |
|  99.99931461237134 |
| 199.99829338441333 |
|  299.9978813897484 |
| 399.99778619682525 |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49583708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档