计算访问sql查询的两行之间的差异

时间:2015-05-13 23:25:14

标签: sql

我正在尝试使用新列创建一个查询,该列包含表1中第X行的行n和行n + 1之间的差异。

表1

Sample_ID:1,2,3,4,5

X:42060,42069,42069,42111,42132

查询1(理想结果)

Sample_ID:1,2,3,4,5

差异:0,9,0,42,21

我使用了以下sql。

SELECT [Table1].Sample_ID,[Table1].X - Prev.X AS Diff
FROM [Table1] INNER JOIN [Table1] AS Prev
ON [Table1].Sample_ID -1 = Prev.Sample_ID
WHERE [Table1].Sample_ID > 1

然而,它省略了第一行;因此,我没有得到上面作为查询1的结果,而是获得以下内容。

结果

Sample_ID:2,3,4,5

差异:9,0,42,21

如何将第一行(Sample_ID = 1)保留为0值?

2 个答案:

答案 0 :(得分:0)

试试这个

SELECT [Table1].Sample_ID,[Table1].X - Prev.X AS Diff
  FROM [Table1] 
       INNER JOIN [Table1] AS Prev ON [Table1].Sample_ID -1 = Prev.Sample_ID
 WHERE [Table1].Sample_ID >= 1

将获取SampleID 大于或等于1 的所有行,或

SELECT [Table1].Sample_ID,[Table1].X - Prev.X AS Diff
  FROM [Table1] 
       INNER JOIN [Table1] AS Prev ON [Table1].Sample_ID -1 = Prev.Sample_ID
 WHERE [Table1].Sample_ID IS NOT NULL

将获取 a SampleID

的所有行

答案 1 :(得分:-1)

您的WHERE子句声明Sample_ID> 1因此它不会选择第一行。

两种方法是将其更改为WHERE Sample_ID> = 1或使用UNION查询。

SELECT [Table1].Sample_ID,[Table1].X AS Diff WHERE Sample_ID = 1
UNION
SELECT [Table1].Sample_ID,[Table1].X - Prev.X AS Diff
  FROM [Table1] 
       INNER JOIN [Table1] AS Prev ON [Table1].Sample_ID -1 = Prev.Sample_ID
 WHERE [Table1].Sample_ID >= 1