あなたはあなたを助けるためにROW_NUMBER
を使用することができます。ここでは
SELECT t.ID, t.val1, t.val2 FROM
(SELECT ID, val1, val2, ROW_NUMBER()
OVER (PARTITION BY val1, val2 ORDER BY ID) AS rownumber
FROM table1) t
WHERE t.rownumber = 1
私はval1
とval2
でレコードを分割し、各レコードの行番号を取得するサブクエリを使用します。次に、外部クエリを使用して、必要な値を返すrownumber=1
の行のみをフィルタリングします。
UPDATE:は、私はあなたが私の最初のクエリはID 8.
が含まれていないでしょう、あなたの期待された結果で同じ繰り返しの値(例えばIDが3と8の両方が結果に表示されなければならない)を、持つことができることを、気付きませんでしたここで
ちょうどあなたの期待される結果のような結果を与える代替ソリューションは、次のとおりです。
SELECT
t.ID,
t.val1,
t.val2
FROM (
SELECT
ID,
val1,
val2,
LAG(val1) OVER (ORDER BY ID) as previousVal1,
LAG(val2) OVER (ORDER BY ID) as previousVal2
FROM table1) t
WHERE
(t.previousVal1 IS NULL and t.previousVal2 IS NULL) OR
t.val1 <> t.previousVal1 OR
t.val2 <> t.previousVal2
ORDER BY t.ID
ここでサブクエリで私はval1
とval2
の以前の値を取得する機能LAG
を使用。次に、外部クエリでは、最初のレコード(条件t.previousVal1 IS NULL and t.previousVal2 IS NULL
で指定)と、val1
とval2
の値が前のレコードと異なるすべてのレコードを選択します。