沿Access中的列的行差异

时间:2017-07-05 16:30:34

标签: ms-access

我在桌面上收集了114个不同的site IDnumericresult以及日期。由于我们每月收集数据,因此每个numericresult有多个Site ID。现在我试图根据各自的站点ID获得数值结果的差异。该表是:

Site ID      CollectDate           NumericResult
1H-1          2/15/2014                 3.2
1H-1          6/22/205                  3.5
2H-4          3/16/2015                 3.0
2H-4          4/20/2014                 2.8
2H-4          2/15/2014                 3.3
1H-11         3/16/2015                 2.9
1H-11         5/12/2016                 3.4

我有大约22000个数据,其中包含114'网站ID'这里。

我想得到一些东西:

Site ID                 NumericResult      Diff
1H-1                           3.2          0
1H-1                           3.5          0.3
2H-4                           3.0          0
2H-4                           2.8          0.2
2H-4                           3.3          0.5
1H-11                          2.9          0
1H-11                          3.4          0.5

对于负值,我也想使用那个绝对值 我将不胜感激任何帮助。 更新:关于网站并查看相同的网站,我得到了这个:

SELECT GIS_allCL2.[Site ID], GIS_allCL2.NumericResult, GIS_allCL2.NumericResult-(SELECT TOP 1 NumericResult FROM GIS_allCL2 AS Q 
WHERE GIS_allCL2.[Site ID]=Q.[Site ID]
AND Q.NumericResult < GIS_allCL2.NumericResult
ORDER BY Q.[Site ID] DESC) AS Diff

FROM GIS_allCL2
WHERE
 (SELECT TOP 1 NumericResult FROM GIS_allCL2 AS Q
WHERE GIS_allCL2.[Site ID]=Q.[Site ID] AND Q.NumericResult< GIS_allCL2.NumericResult) Is Not Null

ORDER BY GIS_allCL2.[Site ID], GIS_allCL2.NumericResult;

不能工作:(

我的桌子是GIS_allCL2。 请多帮忙。

更新

我已经更新了表格,因为在多个siteID中有相同日期的数字结果。它仍然无法正常工作。 请帮忙!

更新:

查询可以正常使用&#39; June7&#39;提供的sql,但最后它会抛出错误:此子查询可以返回最多一条记录。 我知道我有114个站点ID,其中包含来自2014-2017的不同日期以及日期的数字结果。因此,一个站点ID具有多个collectdate,并且一些站点ID可能具有完全相同的collectdate。所以摆脱错误是一个挑战。 请帮助!

1 个答案:

答案 0 :(得分:0)

Allen Browne subquery basics为指导,请考虑:

objcopy -I binary -O elf32-littlearm myfile.txt myfile.txt.o

建议SiteID何时具有多个相同的日期记录。需要唯一的记录标识符,例如自动编号字段,这里称为ID:

SELECT SiteID, NumericResult, CollectDate, 
Abs(NumericResult-(SELECT TOP 1 Dupe.NumericResult FROM GIS_allCL2 As Dupe WHERE Dupe.SiteID=GIS_allCL2.SiteID AND Dupe.CollectDate<GIS_allCL2.CollectDate ORDER BY Dupe.CollectDate DESC)) AS Diff
FROM GIS_allCL2 ORDER BY SiteID, CollectDate;