在 SQL 中提取非零检查金额的最大日期行
此示例演示如何从包含组、日期和货币值(现金和支票)的数据集中选择具有最新日期和非零支票值的唯一组。
使用此查询的初步尝试被证明是不够的:
<code class="language-sql">SELECT group, MAX(date), checks FROM table WHERE checks > 0 GROUP BY group ORDER BY group DESC</code>
此查询返回每个组的所有日期和检查值,而不仅仅是具有最大日期的行中的数据。
解决方案分为两步:
首先,我们使用非零检查值确定每个组的最大日期:
<code class="language-sql">SELECT group, MAX(date) AS max_date FROM table WHERE checks > 0 GROUP BY group</code>
然后,我们将此结果集连接回原始表,以检索那些最大日期行的相应 checks
(以及其他相关列):
<code class="language-sql">SELECT t.group, a.max_date, t.checks FROM table t INNER JOIN ( SELECT group, MAX(date) AS max_date FROM table WHERE checks > 0 GROUP BY group ) a ON a.group = t.group AND a.max_date = t.date;</code>
此内部联接确保最终输出中仅包含匹配最大日期和非零检查条件的行。
最佳实践:使用描述性和非保留字作为列名(例如,group_id
而不是group
)可以提高代码可读性并降低错误风险。
以上是如何在 SQL 中有效地选择具有非零检查值的最大日期行?的详细内容。更多信息请关注PHP中文网其他相关文章!