mysql先order by 再group by还是取不到最新数据

  • 原始写法,先order  by 再 group  by

SELECT p_id,content,create_date from (
        SELECT
            b.id,
            b.p_id,
            b.content,
            b.create_date
        FROM
            con_reply b
        ORDER BY create_date desc
) t2 GROUP BY p_id

但是结果取的p_id对应的并不是最新日期的数据

 

  • 修改后正确(把group by id 结果 order by 排序字段,当前记录的主键,group by之后这个排序的作用会保留)

SELECT p_id,content,create_date from (
        SELECT
            b.id,
            b.p_id,
            b.content,
            b.create_date
        FROM
            con_reply b
        GROUP BY id ORDER BY create_date desc
) t2 GROUP BY p_id

### 实现 MySQL过滤 NULL 值再进行 GROUP BY 的方法 在 SQL 查询中,可以通过 `WHERE` 子句来排除特定条件的数据,在本例中可以用来过滤掉 `NULL` 值后再执行 `GROUP BY` 操作。以下是具体的实现方式: #### 使用 WHERE 过滤 NULL 值 通过在查询语句中加入 `WHERE column_name IS NOT NULL` 来确保只有非空值参与后续的聚合操作。 ```sql SELECT g, SUM(g) AS s FROM tbl WHERE g IS NOT NULL -- 这里用于过滤掉 NULL 值 GROUP BY g ORDER BY NULL LIMIT 5; ``` 上述代码片段展示了如何利用 `WHERE` 子句剔除 `g` 列中的 `NULL` 值[^1]。这样能够保证仅对有效数值进行分组和求和计算。 #### 性能优化考虑 当涉及大规模数据集时,应关注查询性能。如果存在合适的索引,则可显著提升效率。例如对于列 `g` 创建索引可能有助于加速此过程: ```sql CREATE INDEX idx_g_not_null ON tbl(g); ``` 创建该索引后,数据库引擎可以在扫描表之前快速定位到那些满足 `IS NOT NULL` 条件的记录[^2]。 另外需要注意的是,虽然这里讨论了基于单个字段的操作,但在更复杂的场景下(比如多表联接),同样适用类似的逻辑——即尽早应用筛选条件减少中间结果集大小从而提高整体运行速度。 #### Debezium 数据处理注意事项 尽管当前问题是关于 MySQL 查询设计方面的内容,但如果涉及到从变更流捕获工具如Debezium提并路由消息至不同主题的过程中也需留意某些细节。特别是当你尝试依据更新前后的状态(`value.after`, `value.before`)决定目标主题名称时要确认这些属性不为空的情况[^3]。 最后值得一提的是前端框架 Ant Design 在其较新版本已经提供了更加灵活的功能选项,这使得开发者可以根据实际需求定制交互组件而无需自行开发额外功能模块[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值