2013-08-14 5 views
3

У меня есть запись таблицы, как показано ниже: -Получить только последнюю запись второго - MySQL-запрос

my_table

 id |  rating | description 

     1 |   0.0 | bed 
     2 |   1.0 | good 
     3 |   0.0 | bed 
     4 |   1.0 | good 
     5 |   0.0 | bed 
     6 |   0.0 | bed 
     7 |   0.0 | bed 

Теперь я замкнута эта таблица по рейтингу и я получил следующий результат. (запрос: SELECT * FROM my_table ORDER BY DESC рейтинг)

Результат таблицы

 id | rating  | description 

     2 |   1.0 | good 
     4 |   1.0 | good 
     1 |   0.0 | bed 
    ==> 3 |   0.0 | bed 
     5 |   0.0 | bed 
     6 |   0.0 | bed 
     7 |   0.0 | bed 

Теперь я хочу, предыдущий рекорд ид = 3.

ожидаемый результат

 id | rating  | description 

     1 |   0.0 | bed 

Как я могу достичь этого. в одном запросе mysql? Пожалуйста, помогите мне.

+0

Что вы действительно хотите? (Почему вы хотите, чтобы предыдущая запись записи 3?) Вы хотите, чтобы первая запись с рейтингом 0.0? Что означает «первый»? (Я предполагаю, что вы имеете в виду, что первая запись - это запись с наименьшим «id», но вы вообще не заказываете по id.) Вы можете попробовать что-то простое, как 'select * from my_table, где rating = {what you want} order по ограничению id 1'. –

+0

Здесь id = 3 не является static.Suppose я поставлял id = 1 в запросе, тогда он будет извлекать запись 4 | 1.0 | good. пожалуйста, reefer вопрос – user1673762

ответ

4

Используйте это:

SELECT * FROM my_table ORDER BY rating DESC LIMIT 2,1 
+0

Это не разумное решение. Что произойдет, если я хочу получить предыдущую запись id 1? Ваш запрос будет давать статический вывод каждый раз – user1673762

0

Попробуйте

SELECT prev.id, rating, description 
FROM my_table current 
JOIN my_table prev 
    ON (prev.rating < current.rating) 
    OR (prev.rating = current.rating 
     AND (prev.description < current.description 
      OR (prev.description = current.description AND prev.id < current.id))) 
WHERE current.id = @currentId 
ORDER BY prev.rating desc, prev.description desc, prev.id desc 
LIMIT 1 
+0

Hello @Eswara Reddy, Это не работает для current.id = 1 – user1673762

+0

Пожалуйста, проверьте это [ссылка] (http://sqlfiddle.com/#!2/27a00/4) – user1673762

0

Попробуйте это для быстрого решения:

SELECT * FROM my_table WHERE рейтинг = '0.0' и идентификатор < '3' ORDER BY id DESC LIMIT 1

Это выберет строку со следующим самым низким идентификатором, чем один spe который имеет рейтинг 0.0. Это будет работать без сортировки, но не будет получать строки, которые имеют рейтинг 1.0, даже если они будут следующей строкой.

+0

Hello Robert Seddon-Smith, Это не работает для id = 1. – user1673762

+0

Конечно, нет - id1 является первым в вашем списке, поэтому перед ним не будет других. –

0

попробовать это:

select * from my_table 
where rating<(select max(rating) from my_table) 
and 
id<3 
limit 1; 
+0

Это не работает для id = 1 – user1673762

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