0

该表如下所示:

part  value   
BAC    102  
BS1    275  
MAV    425  
BAC    519  
BSF    653  
BAC   1072

结果将是:

对于部分 BAC

part  value  difference   
BAC    102       102  
BAC    519       417  
BAC   1072       553 

除了价值是有序的,没有任何关系。

使用了下面的 SQL 语句,但结果没有用,因为它没有按“WHERE”要求的部分过滤结果,第一行应该有差异 102 的值但它是空的。

 SELECT ABS(T2.value - T1.value) AS Difference, T1.Part,T1.value,  
 FROM table AS T1 RIGHT JOIN table AS T2 ON 
 T2.report = T1.Report+ 1
 WHERE (((T1.part)=[Forms]![Parts]![Part]));

更新:

我添加到@Tom Collins 的功能

Function GetDiff(CurrPart As String, CurrValue As Long) As Long  
Static LastPart As String  
Static LastValue As Long  
   If CurrPart <> LastPart Then  
      LastValue = 0  
      LastPart = CurrPart  
   End If  
   If LastValue = CurrValue Then  
   GetDiff = CurrValue  
   Else  
   GetDiff = CurrValue - LastValue  
   LastValue = CurrValue  
   End If  
End Function  

结论:
函数运行正常,但是当结果放在报表中时发生了奇怪的事情,查询的第一个值出现错误,单击时又出现正确。另一个奇怪的事情是,如果我想要显示错误值的字段的平均值,它会显示正确的平均值,如果我点击错误的值,然后一切正常,平均值保持不变。这个问题已经回答了,剩下的问题是另一个问题。谢谢@汤姆柯林斯。

4

1 回答 1

0

好的,一个全新的答案,即海峡 SQL。

SELECT parts.id,
       parts.part,
       parts.value1,
       [value1] - Nz(Dmax("value1", "parts", "(value1 <" & [value1] &
                                             ") and (part = '" & [part]
                                                        &
                                                           "')"), 0) AS Diff
FROM   parts; 

DMax函数返回前一个值(小于当前值的最大值,且部分相同),如果没有前一个值, Nz函数返回 0。

于 2013-06-10T02:19:26.070 回答