技术文摘
SQL实现每个分类取最新几条数据的代码
2025-01-15 05:03:09 小编
SQL实现每个分类取最新几条数据的代码
在数据处理和分析工作中,我们常常会遇到需要从数据库中按分类获取最新的几条数据的情况。通过SQL语言,我们可以巧妙地实现这一需求。
假设我们有一个名为“products”的表,其中包含“id”(产品ID)、“category”(产品分类)、“product_name”(产品名称)、“create_date”(创建日期)等字段。我们的目标是从每个分类中获取最新创建的3条数据。
一种常见的实现方式是使用窗口函数。在MySQL中,代码如下:
WITH ranked_products AS (
SELECT
id,
category,
product_name,
create_date,
ROW_NUMBER() OVER (PARTITION BY category ORDER BY create_date DESC) as rank
FROM
products
)
SELECT
id,
category,
product_name,
create_date
FROM
ranked_products
WHERE
rank <= 3;
在这段代码中,首先使用CTE(公共表表达式)创建了一个名为“ranked_products”的临时表。在这个临时表中,使用“ROW_NUMBER() OVER (PARTITION BY category ORDER BY create_date DESC)”窗口函数为每个分类内的产品按创建日期降序进行排名。“PARTITION BY category”表示按分类进行分区,“ORDER BY create_date DESC”则是按照创建日期从新到旧排序。然后在外部查询中,只选取排名小于等于3的数据,从而实现了每个分类取最新的3条数据。
如果使用的是Oracle数据库,代码如下:
SELECT
id,
category,
product_name,
create_date
FROM (
SELECT
id,
category,
product_name,
create_date,
ROW_NUMBER() OVER (PARTITION BY category ORDER BY create_date DESC) as rank
FROM
products
)
WHERE
rank <= 3;
其逻辑与MySQL的实现类似,都是利用窗口函数进行排名,然后筛选出排名靠前的数据。
掌握通过SQL实现每个分类取最新几条数据的方法,能大大提高数据处理的效率,帮助我们更快速准确地获取所需信息,无论是在数据分析、报表生成还是其他相关工作场景中,都具有重要的实用价值。
- 三分钟掌握 Web Worker 开启 JS 的“多线程” 面试必备
- 你设计接口竟毫无考虑?
- ES15(2024)中的 5 大惊人新 JavaScript 特性
- 探讨如何利用 Java 实现类似 Nginx 代理的方法
- Cloudflare 与 Vercel 免费部署静态站点的差异,你掌握了吗?
- 三分钟让你秒懂对象内存分配流程
- Spring Boot 中基于 SCRAM 认证集成 Kafka 的详细解析
- Bilibili 三面:死锁检测算法之资源分配图中存在环路是否一定死锁
- PHP 程序员终于搞懂一直令人懵逼的同步阻塞异步非阻塞
- TLA+对 Go 并发程序的形式化验证
- 前端接口杜绝重复请求的实现策略
- 畅谈广受欢迎的哈希表
- 纯 CSS 打造奥运五环 环环相扣
- 基于 Spring Boot 与 EasyExcel 的百万级数据导入导出功能开发
- Meta 四年巨亏 500 亿美元,其 VR/AR 业务症结何在?