ホームページ > データベース > mysql チュートリアル > SQL Server でゼロ以外のチェックを使用して各グループの最新レコードを検索するにはどうすればよいですか?

SQL Server でゼロ以外のチェックを使用して各グループの最新レコードを検索するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-08 13:27:42
オリジナル
499 人が閲覧しました

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

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 をテーブルの実際の名前に置き換えることを忘れないでください。 コードの可読性と保守性を向上させるために、わかりやすい列名 (GroupIDCheckAmount など) を使用することを強くお勧めします。

以上がSQL Server でゼロ以外のチェックを使用して各グループの最新レコードを検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート