请教个sql 查询问题,

idtypedatatime

11112021/07/11

21222021/07/13

32332021/07/10

42442021/07/15

type会有很多,我想每个type查出最新的记录(每个type只显示查一条)

评论区

杜福忠

2021-08-03 10:34

select t.type, t.data, t.time
from (
select type, data, time
from 表名
order by time DESC --可自行修改
limit 9999999 --不能去掉limit
) t
group by t.type

huntxt

2021-08-03 12:29

@杜福忠 收到,谢谢

lcmkc

2021-08-12 01:30

select * from table a where time = (select max(time) from table a1 where a.type = b.type)
这个不是更简单吗

lcmkc

2021-08-12 01:32

不过无论是杜大佬@杜福忠 的方法,还是我的方法,还是要注意索引的设置,不然数据量一多,有你头疼的

huntxt

2021-08-12 11:05

@lcmkc 你这个处理方案有问题,我的实际数据大概100000条,里边有text(大概30-100k),用@杜福忠 的方案大概要12s只取id然后in大概3s,你那个方案我取id就直接卡死

lcmkc

2021-08-17 13:41

@huntxt 这个不是我自己想的方案哈哈哈,这个是Oracle PeopleSoft这套产品查询最新数据的内置sql,工作单位里接近千万数据查询速度还是很可以的嘞,因为这套erp产品要适配多个数据库产品,Oracle天生不支持Limit,所以才要这样写。。我自己做小程序用mysql,相同方法6w多条需要查询最新数据,也没卡死啊,取出所有字段所有行实测也是4-5s左右(我没有text字段,理所应当少了一些时间了),如果加上筛选条件精确到某几条,毫秒级返回。。所以我估计是索引问题吧,这个很吃索引的速度的。

huntxt

2021-08-17 14:11

@lcmkc 好的,我再研究一下