首页 > 数据库 > mysql教程 > 如何高效地检索 SQL 数据库中每个组的顶行?

如何高效地检索 SQL 数据库中每个组的顶行?

Mary-Kate Olsen
发布: 2025-01-25 19:57:15
原创
911 人浏览过

How to Efficiently Retrieve the Top Row for Each Group in a SQL Database?

>从SQL数据库中的每个组中提取顶行 数据分组和分析是数据库管理中的基础。 通常,您需要在每个组中识别第一行(例如,最新条目)。 本文演示了如何使用SQL有效地实现此目的。

>利用窗口函数

> SQL没有为此任务提供专用的聚合功能,但窗口功能提供了优雅的解决方案。 这些函数在定义范围内的行集集合中运行,从而在数据子集上实现了计算和聚合。

>考虑一个名为“ documentStatusLogs”的表,其中列“ DocumentID”,“状态”和“ DateCreated”。要检索每个文档的最新状态,请使用以下SQL查询:>

>通用表表达式(CTE)“排名列表”使用

在每个“ documentID”分区中排除行,由“ dateCreated”(降序)排序。然后,主要查询仅选择
<code class="language-sql">WITH RankedLogs AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) as rn
    FROM DocumentStatusLogs
)
SELECT *
FROM RankedLogs
WHERE rn = 1;</code>
登录后复制
的行,有效地返回每个组的顶行。>

ROW_NUMBER()归一化和数据完整性rn = 1

>

最初的问题还涉及数据库归一化。 示例表(“ documentStatusLogs”)保持状态变化的历史记录。 保持这一历史对于随着时间的推移跟踪变化是有益的。 但是,如果您需要立即访问最新状态,请考虑在“ CurrentDocuments”表中添加“ CurrentStatus”列,然后使用触发器对其进行更新。 这需要仔细的管理以确保数据一致性并避免异常。> 通过结合窗口函数和对数据归一化的考虑,您可以有效地检索SQL数据库中每个组的顶部行。>

以上是如何高效地检索 SQL 数据库中每个组的顶行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板