mysql 从表中获取第二大值

velaa5lx  于 2023-03-11  发布在  Mysql
关注(0)|答案(3)|浏览(119)

我有这样一张table:
| 身份证|连接器标识|读取日期|
| - ------|- ------|- ------|
| 1个|1个|2010年2月21日|
| 第二章|1个|2011年2月21日|
| 三个|第二章|2011年2月21日|
| 四个|第二章|2013年2月21日|
| 五个|第二章|2014年2月21日|
我想要特定“conn_id”的第二个最高read_date,即我想要一个基于conn_id的group。请帮助我解决这个问题。

hwamh0ep

hwamh0ep1#

以下是针对特定conn_id的解决方案:

select max (read_date) from my_table
where conn_id=1
and read_date<(
   select max (read_date) from my_table
   where conn_id=1
)

如果您想使用group by为所有conn_id获取它,请执行以下操作:

select t.conn_id, (select max(i.read_date) from my_table i
where i.conn_id=t.conn_id and i.read_date<max(t.read_date))
from my_table t group by conn_id;
hrirmatl

hrirmatl2#

以下答案应适用于MSSQL:

select id,conn_id,read_date  from (
select *,ROW_NUMBER() over(Partition by conn_id order by read_date desc) as RN 
from my_table
)
where RN =2

这里有一篇关于在MySQL中使用排名函数的有趣文章:
ROW_NUMBER() in MySQL

6qfn3psc

6qfn3psc3#

如果您的表格设计为ID -日期匹配(即一个大ID总是一个大日期),您可以按ID分组,否则请执行以下操作:

$sql_max = '(select conn_id, max(read_date) max_date from tab group by 1) as tab_max';

$sql_max2 = "(select tab.conn_id,max(tab.read_date) max_date2 from tab, $sql_max
where tab.conn_id = tab_max.conn_id and tab.read_date < tab_max.max_date 
group by 1) as tab_max2";

$sql = "select tab.* from tab, $sql_max2 
where tab.conn_id = tab_max2.conn_id and tab.read_date = tab_max2.max_date2";

相关问题