V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cobainlu
V2EX  ›  数据库

有 V2 大佬指导一条 sql 语句怎么写吗?

  •  
  •   cobainlu · 2020-04-18 11:46:21 +08:00 · 2305 次点击
    这是一个创建于 1682 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一组数据

    | id | context(内容) | time(修改次数) | bizNo(流水号) | bizNo_Key(主流水号) |
    | ---- | ------------- | -------------- | ------------- | ------------------- |
    | 1 | 略 | 0 | 1 | 1 |
    | 2 | 略 | 0 | 2 | 2 |
    | 3 | 略 | 1 | 3 | 2 |
    | 4 | 略 | 1 | 4 | 1 |
    | 5 | 略 | 2 | 5 | 1 |

    想要查询得到这样的一组数据,已 bizNo_key 分组,获取每一组里面修改次数最多的那条数据,希望大佬们给点思路.

    | id | context(内容) | time(修改次数) | bizNo(流水号) | bizNo_Key(主流水号) |
    | ---- | ------------- | -------------- | ------------- | ------------------- |
    | 3 | 略 | 1 | 3 | 2 |
    | 5 | 略 | 2 | 5 | 1 |
    14 条回复    2020-04-20 18:23:08 +08:00
    Godykc
        1
    Godykc  
       2020-04-18 12:23:01 +08:00
    关键词 OVER PARTITION BY,然后根据你用的数据库类型自己写着试试,不难的
    gochat
        2
    gochat  
       2020-04-18 12:25:57 +08:00
    ```sql
    select *
    from ttt as a
    left join(
    select max(time) as m, bizNo_key
    from ttt
    group by bizNo_key
    ) as b on (a.bizNo_key = b.bizNo_key and a.time = b.m);
    ```
    多试试
    Yourshell
        3
    Yourshell  
       2020-04-18 12:30:01 +08:00
    同是萌新,难道不是 max+group by 吗
    cobainlu
        4
    cobainlu  
    OP
       2020-04-18 12:52:05 +08:00
    cobainlu
        5
    cobainlu  
    OP
       2020-04-18 12:53:47 +08:00
    @Godykc
    @gochat
    感谢大佬,我去研究一下
    cobainlu
        6
    cobainlu  
    OP
       2020-04-18 12:54:13 +08:00
    @Yourshell select max 的话不能取到所有数据呀
    FanGanXS
        7
    FanGanXS  
       2020-04-18 13:09:05 +08:00 via iPhone
    SELECT
    id,context,MAX(time),bizNo,bizNo_Key
    FROM
    table_name
    GOURP BY
    bizNo_Key
    vindac
        8
    vindac  
       2020-04-18 16:12:24 +08:00
    SELECT * FROM( SELECT id, @rank := IF (@perNO = bizNo_Key, @rank + 1, 1) AS rank, @perNO = bizNo_Key FROM tbl ORDER BY bizNo_Key, time DESC) t WHERE t.rank = 1
    vindac
        9
    vindac  
       2020-04-18 16:14:49 +08:00
    @vindac 不好意思,不小心 at 到了各位
    MOONYANYI
        10
    MOONYANYI  
       2020-04-18 17:13:33 +08:00
    踏实的就是 left join,简洁的就用窗口函数
    liubian
        11
    liubian  
       2020-04-18 20:14:23 +08:00
    SELECT * FROM (SELECT id,context,time,bizNo,bizNo_Key FROM table_name ORDER BY time DESC) t GROUP BY bizNo_Key
    forrestgump
        12
    forrestgump  
       2020-04-19 13:00:00 +08:00 via iPhone
    @FanGanXS 你这个是认真的吗,group by 还能查询非聚合字段以外的非排序字段?
    ackoly
        13
    ackoly  
       2020-04-19 19:50:25 +08:00 via iPhone
    名称数据库的语法不同,建议提问带上数据库名称和版本
    FanGanXS
        14
    FanGanXS  
       2020-04-20 18:23:08 +08:00 via iPhone
    @forrestgump Oracle 还真可以
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2261 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:12 · PVG 00:12 · LAX 08:12 · JFK 11:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.