0

我在 SQL SERVER 2008 R2 中有一个看起来像这样的表

TABLE(
    [Id] [int],
    [FK_Id] [int],
    [SequenceNumber] [smallint],
    [value] [smallint]
(

Id 是唯一的主键,但有多个行具有相同的 FK_Id 和不同的序列号。我想比较具有相同 FK_Id 和最高序列号的两行的值。就像是

SELECT t1.value - t2.value
From Table t1
INNER JOIN Table t2
On t1.FK_Id = t2.FK_Id

我的问题是我不知道如何排序,所以我只得到每个 FK_ID 的最高序列号的两个,可以在 SELECT 语句中完成还是需要逐步完成?

4

2 回答 2

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
于 2013-05-08T09:10:21.340 回答
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
于 2013-05-08T08:50:01.737 回答