gpt4 book ai didi

mysql - 在有序选择中选择前 3 行

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:29 25 4
gpt4 key购买 nike

我有这样的表格数据:

id,time,otherdata
a,1,fsdfas
a,2,fasdfag
a,3,fasdfas
a,7,asfdsaf
b,8,fasdf
a,8,asdfasd
a,9,afsadfa
b,10,fasdf
...

所以基本上,我可以按我想要的顺序选择所有数据,方法如下:

select * from mytable ordered by id,time;

所以我按照我想要的顺序获取所有记录,首先按 ID 排序,然后按时间排序。但不是获取所有记录,我需要每个 ID 的最新 3 次。

回答:

好吧,我知道怎么做了。我对它的速度感到惊讶,因为我正在对几百万行数据进行操作,它花了大约 11 秒。我在 sql 脚本中编写了一个过程来完成它,这就是它的样子。 --请注意,它不是获取最后 3 行,而是获取最后“n”行数据。

use my_database;

drop procedure if exists getLastN;
drop table if exists lastN;

-- Create a procedure that gets the last three records for each id
delimiter //
create procedure getLastN(n int)
begin
# Declare cursor for data iterations, and variables for storage
declare idData varchar(32);
declare done int default 0;
declare curs cursor for select distinct id from my_table;
declare continue handler for not found set done = 1;
open curs;

# Create a temporary table to contain our results
create temporary table lastN like my_table;

# Iterate through each id
DATA_LOOP: loop

if done then leave DATA_LOOP; end if;
fetch curs into idData;
insert into lastThree select * from my_table where id = idData order by time desc limit n;

end loop;
end//

delimiter ;
call getLastN(3);
select * from lastN;

抱歉,如果这不能正常工作,我不得不更改变量名称和其他内容来混淆我的工作,但我运行了这段代码并得到了我需要的东西!

最佳答案

我认为这很简单:

SELECT * FROM `mytable`
GROUP BY `id`
ORDER BY `time` DESC
LIMIT 3

关于mysql - 在有序选择中选择前 3 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com