2013-02-18 4 views
1

Я пытаюсь выбрать строки, где 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].

ответ

1

После Виль получить последние Row

SELECT * FROM table WHERE x=5 ORDER BY id DESC LIMIT 0,1 
+0

Да, но это все равно вернет 5,4 и 1, верно? Я хочу автоматически остановить, где x изменился, чтобы он никогда не возвращал 1. – marvin

1

SQLFiddle demo

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 demo

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) 
) 

Выберите то, что быстрее на вашей базе.

Смежные вопросы