我正在使用 SQL Server 2008,我想知道是否可以在一个 select 语句中完成我的查询,而无需子查询。
如果记录中的字段在最后 10 条创建的记录中为真,我想将变量设置为真,如果最后 10 条记录中的字段为真,则变量将为真,如果为假,则变量将为假,也如果记录总数小于 10,则变量也将为 false。
我的问题是,要获取最新创建的 10 条记录,我需要通过降序对用户进行排序并在前 10 位上进行过滤,因此我的查询应如下所示,其中它不是有效的查询:
declare @MyVar bit
set @MyVar = 0
select top(10) @MyVar = 1 from MyTable
where SomeId = 1000 and SomeFlag = 1
group by SomeId
having count(SomeId) >= 10
order by CreatedDate
请向我提供您的建议。
这是一个示例,假设我们有下表,并说我想检查每个 id 的最新 3 条记录:
ID Joined CreatedDate
1 true 03/27/2013
1 false 03/26/2013
1 false 03/25/2013
1 true 03/24/2013
1 true 03/23/2013
2 true 03/22/2013
2 true 03/21/2013
2 true 03/20/2013
2 false 03/19/2013
3 true 03/18/2013
3 true 03/17/2013
对于 id="1",结果将为 FALSE,因为最近 3 条创建的记录在这 3 条记录中的 JOINED 字段的值不为 true。
对于 id="2",结果将为 TRUE,因为最新创建的 3 条记录在这 3 条记录中具有真正的 JOINED 字段。
对于 id="3",结果将为 FALSE,因为要检查的最新创建记录必须至少为 3 条记录。