我正在尝试创建一个带有新列的查询,其中包含表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值?
发布于 2015-05-13 23:32:31
尝尝这个
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的所有行。
发布于 2015-05-13 23:36:40
WHERE子句声明Sample_ID >1,因此它永远不会选择第一行。
两种方法是将其更改为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 >= 1https://stackoverflow.com/questions/30226817
复制相似问题