SELECT值BEFORE max mysql

时间:2017-03-02 07:56:50

标签: mysql database

所以,我每年都会生成这张表:

+----+------+
| id | name |
+----+------+
|  1 | 20162|
|  2 | 20162|
|  3 | 20171|
|  4 | 20171|<<<||| "how do i get this bfore max value"
|  5 | 20172| 
|  6 | 20172|
+----+------+

如果我查询:

SELECT name FROM table WHERE where name=(SELECT max(name))

结果是 20172

我如何在此之前获得价值(20171)?

7 个答案:

答案 0 :(得分:1)

这将获得第二个最大值

SELECT * 
  FROM table 
    WHERE name NOT IN (SELECT MAX(name) FROM table ) 
ORDER BY id DESC LIMIT 1

答案 1 :(得分:0)

你可以做一点小技巧:

SELECT name FROM table ORDER BY name DESC LIMIT 1,1

如果你想要一个可移植的解决方案(因为上面只能在MySQL中工作):

SELECT name FROM table t1 where 
    1 = (SELECT count(distinct name) 
        from table t2 
        where t2.name > t1.name )

这将选择一个名称,该名称只有一个大于它的名称。例如,它会有问题所有的价值都是一样的,但实际上有时可能是意图。

答案 2 :(得分:0)

你也可以试试这个:

SELECT name
FROM (SELECT DISTINCT name FROM yourtable) TMP
ORDER BY name DESC LIMIT 1,1

答案 3 :(得分:0)

怎么样:

select b.second_id,b.name from
(select id, max(name) as max from tbl_max) as a
LEFT JOIN
(select  id as second_id, name from tbl_max ) as b  
on a.id <> second_id where name < a.max  order by name desc limit 1;

另一种解决方案更好:

set @max= 0;
select max(name) into @max from tbl_max;
select * from tbl_max where name < @max ORDER BY id desc limit 1

它会返回

的结果
  

4 20171

答案 4 :(得分:0)

如果你想要Max(名字)

SELECT id,MAX(name) FROM table
WHERE name < (SELECT MAX(name) FROM table )

SELECT id,MAX(name) FROM table
WHERE name <> (SELECT MAX(name) FROM table )

还有一篇关于Find nth high value

的文章

随着问题后来发生变化,此技巧对此问题 无用)

你可以使用这个简单的order by吗?

SELECT * FROM tablename
group by name
order by name desc
limit 1,1

如果MAX(名称)中有多个相等的值,则需要group by,即使此查询也不是通用解决方案!

答案 5 :(得分:-1)

int p1();

SELECT DISTINCT name FROM table ORDER BY name DESC LIMIT 1,1; 子句接受两个值,偏移量和计数。当仅提供1个值时,它假定偏移量为0

LIMIT是必要的,因为您有重复的名称值。如果这是无意的,那就不需要了。

http://sqlfiddle.com/#!9/ea6e2/2

的示例

答案 6 :(得分:-1)

您可以尝试以下代码。它将为您提供第n个最高记录。

SELECT NAME FROM table ORDER BY name DESC LIMIT n,1

希望这会有所帮助