SQL Server でゼロ以外のチェック値を持つ最新レコードを効率的に取得する
この記事では、特に 'checks' 列の値が 0 より大きいレコードに焦点を当てて、SQL Server テーブル内の各グループの最新のレコードを取得する方法を説明します。 次の構造を持つサンプルテーブルを考えてみましょう:
<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
が 0 より大きい各 GroupID
の最大 CheckAmount
を特定します。
<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 中国語 Web サイトの他の関連記事を参照してください。