sql 分组查询最新的一条数据

本文介绍了一种在SQL中查询特定分组下最新数据的方法。通过先对数据进行降序排序,然后使用LIMIT和GROUP BY结合的方式,确保了每个分组都能获取到最新的记录。这种方法适用于需要获取每个分组最新状态的场景。
部署运行你感兴趣的模型镜像

参考:https://www.cnblogs.com/java-spring/p/11498457.html

 

开发中,遇到查询一个分组中最新的一条数据的需求。记录如下:

需求:从表格statistics中选择consumer_app_name分组中,最新的一条数据。

思路:先排序,再分组,然后保证子查询仍然有序。

 

  • 1、首先将statistics降序排列

注意,使用limit的原理后面再说。


SELECT * 
FROM statistics 
order by create_date desc
limit 10000
  • 2、从降序排列的表中再选择最新的一条

limit是为了让group by实现的子查询仍然有序。

select *
from(
SELECT * 
FROM statistics 
order by create_date desc
limit 10000
) as temp
group by consumer_app_name

 

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### SQL 查询按字段分组获取每组最新一条数据SQL中,可以通过多种方法实现按照某一字段分组并获取每组最新的记录。以下是几种常见的解决方案: #### 方法一:使用子查询与 `JOIN` 实现 这种方法的核心思想是在子查询中找到每个分组内的最大时间戳,然后将其与原始表进行连接以筛选出对应的具体记录。 ```sql SELECT t1.* FROM your_table t1 INNER JOIN ( SELECT id, MAX(timestamp) AS max_timestamp FROM your_table GROUP BY id ) t2 ON t1.id = t2.id AND t1.timestamp = t2.max_timestamp; ``` 此方法适用于大多数关系型数据库系统,包括MySQL、PostgreSQL等[^2]。 --- #### 方法二:使用窗口函数(仅限支持窗口函数的数据库) 对于支持窗口函数的数据库(如MySQL 8.0及以上版本),可以更高效地完成这一操作。通过使用 `ROW_NUMBER()` 或其他窗口函数,可以直接标记每组中的最新记录,并从中提取所需的结果。 ```sql SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY timestamp DESC) AS rn FROM your_table ) subquery WHERE rn = 1; ``` 这里的关键在于 `ROW_NUMBER()` 函数会为每个分区(即每组)分配一个唯一的编号,其中 `ORDER BY timestamp DESC` 确保了最新的记录被赋予编号 `1`。最终只需保留这些编号等于 `1` 的记录即可[^3]。 --- #### 方法三:利用 MySQL 特性直接返回分组后的首行 虽然不推荐这种做法,但在某些特定场景下仍然可行。由于 MySQL 默认允许未加聚合函数的列出现在 `GROUP BY` 结果集中,因此可以选择这种方式快速实现目标。需要注意的是,该方式依赖于 MySQL 的隐式行为,可能不具备跨平台兼容性。 ```sql SELECT id, column1, column2, ..., MAX(timestamp) AS latest_time FROM your_table GROUP BY id; ``` 然而,如果希望获得完整的记录而非仅仅部分字段,则需进一步调整逻辑。例如,结合子查询或者窗口函数来补充缺失的信息[^1]。 --- ### 总结 以上三种方案各有优劣: - **方法一**适合所有主流的关系型数据库; - **方法二**更加简洁明了,尤其当涉及复杂排序条件时表现优异; - **方法三**简单快捷但存在局限性和潜在风险。 具体选用哪种取决于实际环境以及个人偏好。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值