次のデータセットを指定します。(MS)SQL行の選択ここでは、値が直前と直後の行の値と等しくないかどうかを確認します。
# | id ts val
1 | 1 1/1/2000 00:00 1
2 | 2 1/1/2000 00:00 1
3 | 3 1/1/2000 00:00 1
4 | 1 1/1/2000 01:00 2
5 | 2 1/1/2000 01:00 50
6 | 3 1/1/2000 01:00 2
7 | 1 1/1/2000 02:00 3
8 | 2 1/1/2000 02:00 2
9 | 3 1/1/2000 02:00 2
無効なデータを特定しようとしています。このデータの性質は、累積数が常に増加するということです。
上記のデータセットの誤ったデータ行は次のとおりです。行#5
# | id ts val
5 | 2 1/1/2000 01:00 50
この行の50のvalは、そのタイムスタンプの前または後のいずれかの行に等しくないので無効です。 1または2
我々はIDによってデータを並べ替える場合、これは明確で、TS
# | id ts val
1 | 1 1/1/2000 00:00 1
2 | 1 1/1/2000 00:00 2
3 | 1 1/1/2000 00:00 3
4 | 2 1/1/2000 01:00 1
5 | 2 1/1/2000 01:00 50
6 | 2 1/1/2000 01:00 2
7 | 3 1/1/2000 02:00 1
8 | 3 1/1/2000 02:00 2
9 | 3 1/1/2000 02:00 2
は、誰も私がこれらの「無効」の行を選択するために、SQLのSELECT文を構築することができます。
SELECT * FROM MYTABLE
WHERE <val is not equal to OR BETWEEN the row BEFORE or AFTER>
ORDER BY ID, TS
希望する結果は、行番号5を選択することです。
# | id ts val
5 | 2 1/1/2000 01:00 50
ありがとうございました。私は理にかなったことを願っています。
データの2つの異なる例があります。 2番目の例では、常に同じ 'id'と' ts'を持つ3つの行があります。だから、どのようにデータを注文するのですか? –
行番号5はあなたの定義からうまくいきます。私は行#6の問題を参照してください。 –