0

SQL SERVER 2008 R2 に次のようなテーブルがあります

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

Id は一意の主キーですが、FK_Id が同じでシーケンス番号が異なる行が複数あります。同じ FK_Id と最も高い SequenceNumber を持つ 2 つの行の値を比較したいと考えています。何かのようなもの

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

私の問題は、どのように整理するかを理解できないため、FK_ID ごとに最も高い SequenceNumber を持つ 2 つだけを取得することです。SELECT ステートメント内で実行できますか、それとも段階的に行う必要がありますか?

4

2 に答える 2

1

行番号と共通のテーブル式を使用しようとします。ここで私のコードを見てください。

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 に答える