首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qwertyzzz
V2EX  ›  程序员

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

  •  
  •   qwertyzzz · 246 天前 · 1513 次点击
    这是一个创建于 246 天前的主题,其中的信息可能已经有所发展或是发生改变。

    字段 A B Time

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

    13 回复  |  直到 2019-05-27 17:13:51 +08:00
    mezi04
        1
    mezi04   246 天前
    组内 b 最大的是不是也是 id 最大的记录?如果是的话直接取最大 id,再用 id 关联查询,效率应该还可以接收。
    dilu
        2
    dilu   246 天前 via Android
    百度关键词 分组取最大,懒得详说了
    zjlletian
        3
    zjlletian   246 天前
    先排序再 group ?
    polymerdg
        4
    polymerdg   246 天前
    group by MAX ?
    LeeSeoung
        5
    LeeSeoung   246 天前
    row_number over(partition by A order by B desc)
    acehow
        6
    acehow   246 天前 via Android
    select a, max(time) from t group by a
    GeekCourse
        7
    GeekCourse   246 天前
    select a,b,max(time) time from table group by a,b
    qwertyzzz
        8
    qwertyzzz   246 天前
    @acehow @GeekCourse 这样会出现取出来的 time 是最大 但是 b 可能不是对应这个时间段的值
    acehow
        9
    acehow   246 天前 via Android
    @qwertyzzz 这是因为你最大的 time 对应可能有多个 b,会违反 group by 的唯一性原则,如果多个 b 最大随便取一个的话,MySQL 下可以在 select 里用 any_value(b)来随便取个最大的 b 值。
    shangfabao
        10
    shangfabao   246 天前
    不想太复杂去优化性能,把一个值先存到缓存?
    lepig
        11
    lepig   246 天前
    我之前也有过这个类似的需求,不过数据不大,可以预见。 所以用了网上的子查询
    wayne1027
        12
    wayne1027   246 天前
    窗口函数 row_number over(partition by A,B order by Time desc) as rn rn=1
    wayne1027
        13
    wayne1027   246 天前
    @wayne1027 #12 更正下,少了个括号 row_number() over(partition by A,B order by Time desc) as rn rn=1
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   839 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 23:05 · PVG 07:05 · LAX 15:05 · JFK 18:05
    ♥ Do have faith in what you're doing.