V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
qwertyzzz
V2EX  ›  程序员

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

  •  
  •   qwertyzzz ·
    123 · 2019-05-27 09:59:59 +08:00 · 2514 次点击
    这是一个创建于 2032 天前的主题,其中的信息可能已经有所发展或是发生改变。

    字段 A B Time

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

    13 条回复    2019-05-27 17:13:51 +08:00
    mezi04
        1
    mezi04  
       2019-05-27 10:10:59 +08:00
    组内 b 最大的是不是也是 id 最大的记录?如果是的话直接取最大 id,再用 id 关联查询,效率应该还可以接收。
    dilu
        2
    dilu  
       2019-05-27 10:34:51 +08:00 via Android
    百度关键词 分组取最大,懒得详说了
    zjlletian
        3
    zjlletian  
       2019-05-27 10:52:46 +08:00
    先排序再 group ?
    polymerdg
        4
    polymerdg  
       2019-05-27 11:03:02 +08:00
    group by MAX ?
    LeeSeoung
        5
    LeeSeoung  
       2019-05-27 11:05:32 +08:00
    row_number over(partition by A order by B desc)
    acehow
        6
    acehow  
       2019-05-27 14:19:31 +08:00 via Android
    select a, max(time) from t group by a
    GeekCourse
        7
    GeekCourse  
       2019-05-27 14:21:28 +08:00
    select a,b,max(time) time from table group by a,b
    qwertyzzz
        8
    qwertyzzz  
    OP
       2019-05-27 15:31:37 +08:00
    @acehow @GeekCourse 这样会出现取出来的 time 是最大 但是 b 可能不是对应这个时间段的值
    acehow
        9
    acehow  
       2019-05-27 15:39:53 +08:00 via Android
    @qwertyzzz 这是因为你最大的 time 对应可能有多个 b,会违反 group by 的唯一性原则,如果多个 b 最大随便取一个的话,MySQL 下可以在 select 里用 any_value(b)来随便取个最大的 b 值。
    shangfabao
        10
    shangfabao  
       2019-05-27 16:54:47 +08:00
    不想太复杂去优化性能,把一个值先存到缓存?
    lepig
        11
    lepig  
       2019-05-27 16:58:59 +08:00
    我之前也有过这个类似的需求,不过数据不大,可以预见。 所以用了网上的子查询
    wayne1027
        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
    wayne1027
        13
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4858 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:09 · PVG 09:09 · LAX 17:09 · JFK 20:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.