字段 A B Time
会 1 分钟插入一条记录 所有后面记录会很多 我想 GROUP BY A 然后最近的几条 A 相同 B 不同的记录 要求 time 是每个 B 的最大值 网上搜了下是子查询 但是后面这个表会变的很大 先倒序查下上面的会不会又影响
1
mezi04 2019-05-27 10:10:59 +08:00
组内 b 最大的是不是也是 id 最大的记录?如果是的话直接取最大 id,再用 id 关联查询,效率应该还可以接收。
|
2
dilu 2019-05-27 10:34:51 +08:00 via Android
百度关键词 分组取最大,懒得详说了
|
3
zjlletian 2019-05-27 10:52:46 +08:00
先排序再 group ?
|
4
polymerdg 2019-05-27 11:03:02 +08:00
group by MAX ?
|
5
LeeSeoung 2019-05-27 11:05:32 +08:00
row_number over(partition by A order by B desc)
|
6
acehow 2019-05-27 14:19:31 +08:00 via Android
select a, max(time) from t group by a
|
7
GeekCourse 2019-05-27 14:21:28 +08:00
select a,b,max(time) time from table group by a,b
|
8
qwertyzzz OP @acehow @GeekCourse 这样会出现取出来的 time 是最大 但是 b 可能不是对应这个时间段的值
|
9
acehow 2019-05-27 15:39:53 +08:00 via Android
@qwertyzzz 这是因为你最大的 time 对应可能有多个 b,会违反 group by 的唯一性原则,如果多个 b 最大随便取一个的话,MySQL 下可以在 select 里用 any_value(b)来随便取个最大的 b 值。
|
10
shangfabao 2019-05-27 16:54:47 +08:00
不想太复杂去优化性能,把一个值先存到缓存?
|
11
lepig 2019-05-27 16:58:59 +08:00
我之前也有过这个类似的需求,不过数据不大,可以预见。 所以用了网上的子查询
|
12
wayne1027 2019-05-27 17:13:03 +08:00
窗口函数 row_number over(partition by A,B order by Time desc) as rn rn=1
|