› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
uti6770werty
V2EX  ›  MySQL

Mysql group by 然后再 order by,但不能按最新时间查询出来...

  •  
  •   uti6770werty · May 31, 2021 · 4907 views
    This topic created in 1988 days ago, the information mentioned may be changed or developed.
    SELECT * FROM `testyyy`.`DLLog` GROUP BY `proc` ORDER BY `logtime` DESC;

    打算查询出 proc 为分组,logtime 最新(降序),但 logtime 是升序的,显示的是最早时间的,语法上是不能这样使用?
    22 replies  •  2021-06-01 10:37:44 +08:00
    crazytudou
    crazytudou
    May 31, 2021
    1
    select * 用 group by ?没明白你想分啥组。。。
    iyaozhen
    iyaozhen
    May 31, 2021
    2
    只会显示 proc 组中 logtime 倒序后的第一条,并不是全部都按 logtime 倒序。你需要再加个查询排下序
    setsunakute
    setsunakute
    May 31, 2021
    3
    SELECT *,(select logtime from `testyyy`.`DLLog` as a where a.proc = b.proc order by logtime desc limit 1) FROM `testyyy`.`DLLog` as b GROUP BY `proc`;

    那你应该是需要这样的效果
    7Qi7Qi
    7Qi7Qi
    May 31, 2021
    4
    select proc, max(logtime) from `testyyy`.`DLLog` group by proc order by max(logtime) desc 这样?
    justseemore
    justseemore
    May 31, 2021
    5
    😂 top k 问题?
    GOXXX
    GOXXX
    May 31, 2021
    6
    3 搂正解
    zhangysh1995
    zhangysh1995
    May 31, 2021
    7
    考虑一下 window function,用 partition by proc 然后排序
    lshero
    lshero
    May 31, 2021
    8
    rank over partition
    lichao
    lichao
    May 31, 2021
    9
    这是 MySQL 比较坑的地方,严格的数据库这里应该报错
    lichao
    lichao
    May 31, 2021
    10
    @lichao 本身就会报错。。。
    rockyliang
    rockyliang
    May 31, 2021
    11
    不是很懂你想怎样排序,是每个分组都留下 logtime 最新的那一行,然后整个结果集再按 logtime DESC 排序?
    uti6770werty
    uti6770werty
    OP
    May 31, 2021
    12
    @setsunakute 我好像看懂了意思,只是这个要出结果要很久,我这里是 70 多秒才能出来。。。

    @rockyliang 是的,每个分组留下 logtime 最新的那一行,然后按 logtime DESC 排序,人话就是:要看每个 proc,最后的 logtime 的整行全部列的内容(*)。。。
    tame619
    tame619
    May 31, 2021 via iPhone
    13
    SELECT * from LOG l
    left join
    (
    select
    max(logtime),ID
    from LOG
    GROUP BY proc
    )a on a.ID=l.ID
    where a.ID is not null
    ORDER BY l.logtime desc
    tame619
    tame619
    May 31, 2021 via iPhone
    14
    inner join
    keepeye
    keepeye
    May 31, 2021
    15
    不要用 order by,select max(logtime)
    tame619
    tame619
    May 31, 2021 via iPhone
    16
    直接在 max 完,套一层 select,不用 join 我太蠢了
    onhao
    onhao
    May 31, 2021
    17
    https://wuhao.pw/archives/178/
    当 group by 遇上 order by 后总感觉语句是对的,然而结果却...
    ricadro
    ricadro
    May 31, 2021 via iPhone
    18
    mysql 没有开窗函数 只能子查询查询出最新的时间然后在 groupby
    egfegdfr
    egfegdfr
    Jun 1, 2021
    19
    group by 和 order by 不能同时使用,需要拆开放到子查询
    leon0318
    leon0318
    Jun 1, 2021 via iPhone
    20
    @lichao 喷错了……2333
    lepig
    lepig
    Jun 1, 2021
    21
    好像 select*,max(logtime)就可以。之前做过一个类似的需求
    zhaofq
    zhaofq
    Jun 1, 2021
    22
    TOP K 问题
    8.0 版本直接用开窗函数
    低版本用子查询
    MySQL 不支持 order by 和 group by 同时使用实现组内排序
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1369 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 17:06 · PVG 01:06 · LAX 09:06 · JFK 12:06
    ♥ Do have faith in what you're doing.