这是我的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的第二个最大日期。
我知道一些查询以找到第二个最大值,但所有这些都没有让我回答。
答案 0 :(得分:1)
如果是MySql则使用LIMIT 1,1
; #检索行[以rec开头] 1- [fetch rec count] 1
答案 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;在存储过程中执行预准备语句。只需谷歌搜索有关这些的教程。