0

sqlite データベースには、次のテーブルがあります。

id オブジェクト val1 val2 'タイム スタンプ'
1Z 100 102 53
2Z 100 102 54
3Z 100 103 55
4A 99 123 23
5A 23 245 35
6A 23 245 36
7 23 245 37
8A 23 245 38
9A 99 123 119

すべての種類のオブジェクトについて、値 val1 と val2 がタイムスタンプとともに記録されます。各オブジェクトのいずれかの値フィールドの変更を含むすべての行を選択するにはどうすればよいですか? したがって、次の結果を持つ select ステートメントが必要です。

id オブジェクト val1 val2 'タイム スタンプ'
1Z 100 102 53
3Z 100 103 55
4A 99 123 23
5A 23 245 35
9A 99 123 119

誰かが正しいSQLクエリで私を助けてくれますか. ありがとうございました。

4

2 に答える 2

0

Oobjectと timestampを持つレコードの場合T、次のクエリは、関連するのレコード、つまり よりもまだ小さい最大のタイムスタンプを持つレコードの値を見つけTます。

SELECT val1, val2
FROM MyTable
WHERE object = O
  AND "time stamp" < T
ORDER BY "time stamp" DESC
LIMIT 1

このようなものをサブクエリとして使用することで、両方の値のセットを取得して比較できます。

SELECT *
FROM MyTable AS T1
WHERE val1 || ',' || val2 IS NOT (SELECT T2.val1 || ',' || T2.val2
                                  FROM MyTable AS T2
                                  WHERE T2.object = T1.object
                                    AND T2."time stamp" < T1."time stamp"
                                  ORDER BY T2."time stamp" DESC
                                  LIMIT 1)

両方の値から文字列を作成すると、2 つのサブクエリを使用する必要がなくなります。前のレコードが存在しない場合にサブクエリが返されるため、
これはIS NOT代わりに使用します。<>NULL

于 2013-04-23T11:33:42.923 に答える