非常にパフォーマンスに敏感な SQL Server DB を持っています。次の問題を効率的に選択する必要があります。
4つのフィールドを持つ単純なテーブルがあります:
ID [int, PK]
UserID [int, FK]
Active [bit]
GroupID [int, FK]
各 UserID は、Active='false' の GroupID (および複数の groupID) で複数回表示できますが、Active='true' の場合は 1 回だけです。
そのような:
(id,userid,active,groupid)
1,2,false,10
2,2,false,10
3,2,false,10
4,2,true,10
ユーザーの最後のアクティブな状態を保持する必要がある特定のグループのテーブルから、すべての個別のユーザーを選択する必要があります。ユーザーがアクティブな状態にある場合 - ユーザーの非アクティブな状態を返す必要はありません。
単純な解決策は二重選択です。1 つはすべてのアクティブなユーザーを選択し、もう 1 つは最初の select ステートメントに表示されないすべての非アクティブなユーザーを選択します (各ユーザーはある時点で非アクティブな状態になる可能性があるため)。 )。しかし、これは最初の選択 (アクティブなユーザーを含む) を 2 回実行することになり、これは非常に望ましくありません。
必要なクエリを取得するために 1 つだけを選択するスマートな方法はありますか? アイデア?
よろしくお願いします!