You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建滚动计算理论?附SQL Fiddle表结构示例

滚动计算TVD(垂深)的SQL实现方案

嘿,我看了你提供的TVD表结构和测点数据,想要实现滚动计算累计垂深对吧?先帮你理清楚逻辑,再给出具体的SQL实现。

首先,先把你提供的表结构和初始数据整理成规范的SQL代码块:

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);
-- 后续测点数据可按此格式继续补充

滚动计算的核心逻辑

定向井垂深(TVD)的滚动计算,最常用的是平均角法,逻辑非常直观:

  1. 单段垂深增量 = 当前测点与前一测点的测深差 × 两段倾角平均值的余弦值
  2. 累计垂深 = 从初始测点到当前测点的所有垂深增量之和(滚动累加)

你的表已经存储了incl(当前测点倾角)和incl_prev(前一测点倾角),而且都是弧度值,刚好可以直接用SQL的COS()函数计算余弦值。

SQL实现代码

利用SQL Server的窗口函数SUM() OVER()就能轻松实现滚动累加,具体代码如下:

SELECT 
    PK,
    MSR AS 当前测深,
    MSR_PREV AS 前一测深,
    incl AS 当前倾角_弧度,
    incl_prev AS 前一倾角_弧度,
    -- 计算当前段的垂深增量
    CASE 
        WHEN PK = 1 THEN 0.0  -- 初始测点无前置段,增量为0
        ELSE (MSR - MSR_PREV) * COS( (incl + incl_prev) / 2 )
    END AS 垂深增量,
    -- 滚动累加得到累计垂深
    SUM(
        CASE 
            WHEN PK = 1 THEN 0.0
            ELSE (MSR - MSR_PREV) * COS( (incl + incl_prev) / 2 )
        END
    ) OVER (ORDER BY PK) AS 累计垂深_TVD
FROM TVD
ORDER BY PK;

代码说明

  • 初始测点(PK=1)的垂深增量设为0,累计垂深也为0,符合实际的初始状态。
  • SUM() OVER (ORDER BY PK)会自动按照PK的顺序,累加从第一个测点到当前测点的所有垂深增量,完美实现滚动计算的效果。
  • 如果需要更精确的计算方式(比如考虑方位角变化的最小曲率法),可以随时告诉我,我再帮你调整公式。

内容的提问来源于stack exchange,提问作者arcee123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:24:39