过滤SELECT语句中的属性

时间:2013-05-08 08:44:31

标签: sql sql-server sql-server-2008

我在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语句中完成还是我需要分步进行?

2 个答案:

答案 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