1

是否可以在不使用限制的情况下从表中选择下一个较低的数字。

例如:如果我的桌子有10, 3, 2 , 1我正在尝试select * from table where col > 10

我期待的结果是3。我知道我可以使用限制 1,但是没有它可以做到吗?

4

4 回答 4

6

尝试

SELECT MAX(no) no
  FROM table1
 WHERE no < 10

输出:

| NO |
------
|  3 |

SQLFiddle

于 2013-05-17T06:20:28.260 回答
2

试试这个查询

SELECT 
   * 
FROM
   (SELECT 
      @rid:=@rid+1 as rId,
      a.*
   FROM 
      tbl a
   JOIN
      (SELECT @rid:=0) b
   ORDER BY 
      id DESC)tmp
WHERE rId=2;

SQL 小提琴

| RID | ID |    TYPE |     DETAILS |
------------------------------------
|   2 | 28 | Twitter | @sqlfiddle5 |

另一种方法

select a.* from supportContacts a inner join 
(select max(id) as id
from supportContacts
where 
id in (select id from supportContacts where id not in 
       (select max(id) from supportContacts)))b
on a.id=b.id

SQL 小提琴

| ID |    TYPE |     DETAILS |
------------------------------
| 28 | Twitter | @sqlfiddle5 |
于 2013-05-17T06:41:12.987 回答
1

或者,此查询将始终根据内部 where 子句获得第二高的数字。

SELECT  *
FROM
        (
            SELECT  t.col, 
                    (
                        SELECT COUNT(distinct t2.col) 
                        FROM tableName t2 
                        WHERE t2.col >= t.col
                    ) as rank
            FROM    tablename t
            WHERE   col <= 10
        ) xx
WHERE   rank = 2             -- <<== means second highest
于 2013-05-17T06:23:12.000 回答
-1

如果您想从表中获取下一个较低的数字

你可以用这个查询得到它:

SELECT distinct col FROM table1 a 
WHERE  2 = (SELECT count(DISTINCT(b.col)) FROM table1 b WHERE a.col >= b.col);

稍后再如果您想获得第三个较低的数字,您可以在 where 子句中通过 3 代替 2

再次,如果您想获得第二个更高的数字,只需更改内部查询中 where 子句的条件

a.col <= b.col
于 2013-05-17T06:44:50.830 回答