我有一个包含以下列的表格
- 试用 ID
- 积分
- 试用日期时间
- 用户身份
这代表用户进行的试验和他在试验中获得的分数。一个特定的用户可以进行 10 次试验,因此他可能在表中有 10 条记录。
我想获取所有分数超过 50 的记录,但前提是该试验代表该特定用户的第 4 次或更多试验。表中未列出特定试验的数量。但是,如果用户 ID 有 5 次试验,则可以使用日期时间字段来确定哪个是第一个/第二个等。
所以基本上我想获得分数大于 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。