我正在尝试使用新列创建一个查询,该列包含表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值?
答案 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