MS Access - 当前行和上一行之间的Delta(在x上更改)

时间:2016-11-07 17:21:12

标签: sql ms-access-2013 access delta

我一直都在搜索这个网站和谷歌一般都试图找到我的问题的解决方案,但我似乎遇到的只是我的查询中的错误。

我有一张名为Survey的表,其中包括Hole,Depth,Az,Dip。

Hole   Depth   Az     Dip
---------------------------
AB1     0      170    -77
AB1    150     166    -76.5
AB1    200     160    -75
AD1     0      350    -88
AD1    65      344    -87.6
AD1    89      340    -85.4
AB2     0      152    -66
AB2    135     150    -63.2

我需要一个查询,它可以找到az深度(两行之间)的变化和深度(两行之间)的变化,但仅适用于以'AB'开头的孔。因此,最终输出应该看起来像这样(使用单个值而不是公式):

Hole   Depth   DeltaAz            DeltaDip
-------------------------------------------
AB1    150     (170-166)/150       (-77--76.5)/150
AB1    200     (166-160)/50        (-76.5--75)/50
AB2    135     (152-150)/135       (-66--63.2)/135

我已经尝试了一些我在这里找到的不同可能的查询,但没有真正有用的。我得到的最接近的是下面的简单代码,我用来测试第一步(获得两行之间的差异)。但是,当它运行时,我会看到结果和错误消息Only one record can be returned by this subquery。当我点击错误时,我的所有结果都消失了。

SELECT Hole, Depth, [Az] - (
            SELECT TOP 1 Az 
            FROM Survey AS S 
            WHERE Survey.Hole = S.Hole AND S.Az < Survey.Az 
            ORDER BY S.Az DESC
            ) AS Diff
FROM Survey
WHERE (
    SELECT TOP 1 Az 
    FROM Survey AS S 
    WHERE Survey.Hole = S.Hole AND S.Az < Survey.Az
    ) 
    IS NOT NULL AND Hole LIKE 'AB*'
ORDER BY Survey.Hole, Depth, Survey.Az
;

有没有人有解决方案来帮助我?我正在使用MS Access 2013。

1 个答案:

答案 0 :(得分:0)

:编辑:显然我没有研究理解,而且row_number()在MS访问中不可用,并且没有任何好的选择。

我并非100%确定这完全你需要什么,我相信它可以改进,但它应该让你朝着正确的方向前进。

您收到的错误消息是因为您的子查询返回了多条记录 - 即使您已指定&#34; top 1&#34;,我认为顶级条款未经处理直到返回结果,并且当子查询返回多个记录时,它才会出错。您可以使用row_number()离散地返回一条记录(这是我在下面所做的)。

在线试用http://rextester.com/RBQ22368

tf.verify_tensor_all_finite(..)