首页 >数据库 >mysql教程 >如何在 SQL Server 中通过非零检查查找每个组的最新记录?

如何在 SQL Server 中通过非零检查查找每个组的最新记录?

Barbara Streisand
Barbara Streisand原创
2025-01-08 13:27:42478浏览

How to Find the Most Recent Record for Each Group with Non-Zero Checks in SQL Server?

在 SQL Server 中使用非零检查值高效检索最新记录

本文演示了如何检索 SQL Server 表中每个组的最新记录,特别关注“checks”列值大于零的记录。 让我们考虑一个具有以下结构的示例表:

<code>| GroupID | RecordDate | CashAmount | CheckAmount |
|---|---|---|---|
| 1 | 2013-01-01 | 0 | 0 |
| 2 | 2013-01-01 | 0 | 800 |
| 1 | 2013-01-03 | 0 | 700 |
| 3 | 2013-01-01 | 0 | 600 |
| 1 | 2013-01-02 | 0 | 400 |
| 3 | 2013-01-05 | 0 | 200 |</code>

我们的目标是获得以下结果集:

<code>| GroupID | RecordDate | CheckAmount |
|---|---|---|
| 2 | 2013-01-01 | 800 |
| 1 | 2013-01-03 | 700 |
| 3 | 2013-01-05 | 200 |</code>

以下是如何使用 SQL 查询实现此目的:

首先,我们确定每个 RecordDate 的最大值 GroupID,其中 CheckAmount 大于 0:

<code class="language-sql">SELECT GroupID, MAX(RecordDate) AS MaxRecordDate
FROM YourTable
WHERE CheckAmount > 0
GROUP BY GroupID;</code>

然后,我们将此结果连接回原始表以检索相应的CheckAmount

<code class="language-sql">SELECT yt.GroupID, yt.RecordDate, yt.CheckAmount
FROM YourTable yt
INNER JOIN (
    SELECT GroupID, MAX(RecordDate) AS MaxRecordDate
    FROM YourTable
    WHERE CheckAmount > 0
    GROUP BY GroupID
) AS MaxDates ON yt.GroupID = MaxDates.GroupID AND yt.RecordDate = MaxDates.MaxRecordDate;</code>

此查询有效地过滤非零支票金额,并仅选择每组的最新记录。 请记住将 YourTable 替换为您的表的实际名称。 强烈建议使用描述性列名称(例如 GroupIDCheckAmount),以提高代码的可读性和可维护性。

以上是如何在 SQL Server 中通过非零检查查找每个组的最新记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn