>从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中文网其他相关文章!