如何找到我的查询的第二个最大值

时间:2016-07-21 08:25:50

标签: php mysql sql

这是我的SQL查询,用于在currency_price表中查找按插入表的最大日期分组的行。我的问题是如何找到第二个最大值。我的意思是如何更改此查询以在每个组中找到第二个最大行

select currency_id,buy,sell 
from (select * from currency_price  order by `currency_id`, cu_date desc,buy,sell) x 
group by `currency_id`

通过此查询,我为每个ID找到了一行,例如我为每个id.exm出售和购买:

id    sell buy
1000  500  480
1001  20   19
...

但是我想要每个id的第二个最大日期。

我知道一些查询以找到第二个最大值,但所有这些都没有让我回答。

3 个答案:

答案 0 :(得分:1)

如果是MySql则使用LIMIT 1,1; #检索行[以rec开头] 1- [fetch rec count] 1

http://dev.mysql.com/doc/refman/5.7/en/select.html

答案 1 :(得分:0)

使用ROW_NUMBER()

<强>示例

SELECT * FROM 
(
SELECT *,ROW_NUMBER() OVER (ORDER BY AGE DESC) RNUM  FROM TEST_TABLE
) QUERY1 WHERE RNUM=2

答案 2 :(得分:0)

您可以手动将组订单号添加到初始订购的查询中。然后从每一行中选择第二行。

内部查询,按要求排序&amp;将行从1开始编号,每次currency_id更改时重置。

set @num := 0, @ci := -1;

select currency_id,buy,sell 
from
  (select *,
    @num := if(@ci = currency_id, @num + 1, 1) as gp_number,
    @ci := currency_id as dummy 
  from currency_price
  order by `currency_id`, cu_date desc,buy,sell) x
where gp_number=2

这可以从工作台放入存储过程,如下所示:

DELIMITER $$
CREATE PROCEDURE SecondMaximum()
BEGIN
set @num := 0, @ci := -1;

select currency_id,buy,sell 
from
  (select *,
    @num := if(@ci = currency_id, @num + 1, 1) as gp_number,
    @ci := currency_id as dummy 
  from currency_price
  order by `currency_id`, cu_date desc,buy,sell) x
where gp_number=2;
END$$

DELIMITER ;

从PHP执行“CALL SecondMaximum();”

如果您希望能够更改表格和/或字段,则可以将这些作为字符串变量传递给过程&amp;创造&amp;在存储过程中执行预准备语句。只需谷歌搜索有关这些的教程。