在 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
替换为您的表的实际名称。 强烈建议使用描述性列名称(例如 GroupID
和 CheckAmount
),以提高代码的可读性和可维护性。
以上是如何在 SQL Server 中通过非零检查查找每个组的最新记录?的详细内容。更多信息请关注PHP中文网其他相关文章!