Group by 搜出最大时间的记录咋整呀

2019-05-27 09:59:59 +08:00
 qwertyzzz

字段 A B Time

会 1 分钟插入一条记录 所有后面记录会很多 我想 GROUP BY A 然后最近的几条 A 相同 B 不同的记录 要求 time 是每个 B 的最大值 网上搜了下是子查询 但是后面这个表会变的很大 先倒序查下上面的会不会又影响

2410 次点击
所在节点    程序员
13 条回复
mezi04
2019-05-27 10:10:59 +08:00
组内 b 最大的是不是也是 id 最大的记录?如果是的话直接取最大 id,再用 id 关联查询,效率应该还可以接收。
dilu
2019-05-27 10:34:51 +08:00
百度关键词 分组取最大,懒得详说了
zjlletian
2019-05-27 10:52:46 +08:00
先排序再 group ?
polymerdg
2019-05-27 11:03:02 +08:00
group by MAX ?
LeeSeoung
2019-05-27 11:05:32 +08:00
row_number over(partition by A order by B desc)
acehow
2019-05-27 14:19:31 +08:00
select a, max(time) from t group by a
GeekCourse
2019-05-27 14:21:28 +08:00
select a,b,max(time) time from table group by a,b
qwertyzzz
2019-05-27 15:31:37 +08:00
@acehow @GeekCourse 这样会出现取出来的 time 是最大 但是 b 可能不是对应这个时间段的值
acehow
2019-05-27 15:39:53 +08:00
@qwertyzzz 这是因为你最大的 time 对应可能有多个 b,会违反 group by 的唯一性原则,如果多个 b 最大随便取一个的话,MySQL 下可以在 select 里用 any_value(b)来随便取个最大的 b 值。
shangfabao
2019-05-27 16:54:47 +08:00
不想太复杂去优化性能,把一个值先存到缓存?
lepig
2019-05-27 16:58:59 +08:00
我之前也有过这个类似的需求,不过数据不大,可以预见。 所以用了网上的子查询
wayne1027
2019-05-27 17:13:03 +08:00
窗口函数 row_number over(partition by A,B order by Time desc) as rn rn=1
wayne1027
2019-05-27 17:13:51 +08:00
@wayne1027 #12 更正下,少了个括号 row_number() over(partition by A,B order by Time desc) as rn rn=1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/567928

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX