2

x=5 の行を選択しようとしていますが、x は常に変化します。だから私はそのようなテーブルを持っています:

 id    x
----  ---
 1     5
 2     6
 3     4
 4     5
 5     5

"SELECT * FROM table WHERE x=5 AND _???_;"したがって、行 4 と 5 を返すが行 1 を返さないようなクエリを実行したいと考えています。

つまり、x が最近この値を持っていた行を取得したいと考えています。私は自分自身を明確にしたことを願っています。ありがとう!

編集: x が私の変更の最後の値を取得した後のエントリの数。つまり、テーブルは次のようにもなります。

 id    x
----  ---
 1     5
 2     6
 3     4
 4     5
 5     1
 6     5
 7     5
...    5
100    5
101    5

この場合、行 [6-101] を返す必要があります。

4

2 に答える 2

2

以下は最近の行を取得します

SELECT * FROM table WHERE x=5 ORDER BY id DESC LIMIT 0,1
于 2013-02-18T12:14:51.993 に答える
1

SQLFiddleデモ

select * from t t1
where 
x=(select x from t order by id desc limit 1)
and
not exists
(select x from t where id>t1.id and x<>t1.x)

または SQLFiddleデモ

select * from t t1
where 
x=(select x from t order by id desc limit 1)
and
id>=
(select max(id) from t 
  where x<>
   (select x from t order by id desc limit 1)
)

あなたのベースでより速いものを選択してください。

于 2013-02-18T12:56:32.390 に答える