我在SQL SERVER 2008 R2中有一个看起来像这样的表
TABLE(
[Id] [int],
[FK_Id] [int],
[SequenceNumber] [smallint],
[value] [smallint]
(
Id是唯一的主键,但有多个行具有相同的FK_Id和不同的序列号。我想比较两行的值与相同的FK_Id和最高的SequenceNumber。像
这样的东西SELECT t1.value - t2.value
From Table t1
INNER JOIN Table t2
On t1.FK_Id = t2.FK_Id
我的问题是我无法弄清楚如何排序,所以我只得到每个FK_ID具有最高SequenceNumber的两个,可以在SELECT语句中完成还是我需要分步进行?
答案 0 :(得分:1)
我会尝试使用rownumber和公用表表达式。看看我这里的代码。
with mydata (id, value, row) as
(
SELECT ID, value,
ROW_NUMBER() OVER(PARTITION BY FK_ID ORDER BY Sequencenumber ASC) AS Row
FROM mytable
) select * from mydata where [row] between 1 and 2
答案 1 :(得分:0)
您可以使用MAX()函数
SELECT t1.value - t2.value
From Table t1
INNER JOIN Table t2
On t1.FK_Id = t2.FK_Id
要
SELECT T1.Id, (T1.VALUE-T2.VALUE) AS VALUEMIN, MAX(T1.FK_ID) FROM TABLE T1, T2
WHERE T1.FK_ID = T2.FK_ID
GROUP BY T1.Id