次の列を持つテーブルがあります
- トライアル ID
- ポイント
- TrialDateTime
- ユーザーID
これは、ユーザーが行ったトライアルと、トライアルで獲得したポイントを表します。特定のユーザーが 10 回の試行を行う可能性があるため、テーブルには 10 個のレコードが含まれる場合があります。
ポイントが 50 を超えるすべてのレコードを取得したいのですが、そのトライアルがその特定のユーザーの 4 回目以降のトライアルである場合に限ります。特定の試行回数は表に示していません。ただし、ユーザー ID に 5 回の試行がある場合、datetime フィールドを使用して、どちらが 1 回目か 2 回目かなどを判断できます。
したがって、基本的には、スコアが 50 より大きいすべての試行を取得したいと考えています。同じユーザー ID には、日時が短いテーブル内の他の 3 つの試行があります。
SQL経由でこれを行う方法はありますか?
私は得ることができることを知っています
select * from tbl where points > 50;
ポイントが 50 を超えるすべてのレコードを取得できますが、さらにフィルタリングするにはどうすればよいですか?
X という変数に特定のレコードの日時があれば、次のことができます。
select count(TrialId) from tbl where TrialDateTime > 'somedatetime' and userid = 'someuid'.
同じユーザー ID に対して 3 つ以上の古いレコードがあるかどうかを確認します。しかし、SQL を使用してこの両方を組み合わせる方法はありますか? 他にどのようなオプションがありますか?
サンプルレコード
1. T1, 20, 2013-05-09 14:10:27.000, U1
2. T2, 40, 2013-05-09 14:20:27.000, U1
3. T3, 45, 2013-05-09 14:30:27.000, U1
4. T4, 60, 2013-05-09 14:40:27.000, U1
5. T5, 20, 2013-05-09 12:11:27.000, U2
6. T6, 30, 2013-05-09 12:12:27.000, U2
7. T7, 60, 2013-05-09 12:13:27.000, U2
8. T8, 40, 2013-05-09 12:54:27.000, U2
ここではレコード 4 が選択されます。ただし、レコード 7 は両方とも 50 を超えるスコアがありますが、選択されません。
SQL Server 2008 R2 を使用しています。