仅获取倒数第二条记录 - MySQL查询

3

I have a table record like below:-

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

现在我想要id为3的先前记录。

期望结果

        id | rating      | description

         1 |         0.0 | bed

我该如何在单个MySQL查询中实现它?请帮助我。

你真正想要什么?(为什么你想要记录3的前一条记录?)你想要评分为0.0的第一条记录吗?"第一"是什么意思?(我假设你所说的第一条记录是具有最低id的记录,但你根本没有按id排序。)你可以尝试一些简单的东西,如select * from my_table where rating = {你想要的} order by id limit 1 - ZZ-bb
这里的id = 3不是静态的。假设我在查询中提供了id = 1,那么它将检索记录4 | 1.0 | good。请参考问题。 - jyorge maccaline
4个回答

4
使用以下代码:
SELECT * FROM my_table ORDER BY rating DESC LIMIT 2,1

这不是一个明智的解决方案。如果我想检索id为1的先前记录会发生什么?你的查询将每次给出静态输出。 - jyorge maccaline

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

试试这个:

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

0
尝试使用以下快速解决方案:
SELECT * FROM my_table WHERE rating='0.0' and id<'3' ORDER BY id DESC LIMIT 1
这将选择具有评分为0.0的下一个最低ID的行。 这将在不排序的情况下工作,但不会检索任何具有评分1.0的行,即使它们是下一行。

你好,Robert Seddon-Smith, 这个id = 1的代码不起作用。 - jyorge maccaline
当然不会 - id1 是你的列表中的第一个,所以它之前没有其他元素。 - Robert Seddon-Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接