所以,我每年都会生成这张表:
+----+------+
| 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)?
答案 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
是必要的,因为您有重复的名称值。如果这是无意的,那就不需要了。
答案 6 :(得分:-1)
您可以尝试以下代码。它将为您提供第n个最高记录。
SELECT NAME FROM table ORDER BY name DESC LIMIT n,1
希望这会有所帮助