我有一个对性能非常敏感的 SQL Server 数据库。我需要对以下问题做出有效的选择:
我有一个包含 4 个字段的简单表格:
ID [int, PK]
UserID [int, FK]
Active [bit]
GroupID [int, FK]
每个 UserID 可以在 Active='false' 的 GroupID 中出现多次(以及在多个 groupID 中),但在 Active='true' 时只能出现一次。
如:
(id,userid,active,groupid)
1,2,false,10
2,2,false,10
3,2,false,10
4,2,true,10
我需要从某个组中的表中选择所有不同的用户,它应该保存用户的最后一个活动状态。如果用户处于活动状态 - 它不应该返回用户的非活动状态,如果它在某个时间点是这样的。
天真的解决方案是双重选择 - 一个选择所有活动用户,然后一个选择所有未出现在第一个选择语句中的非活动用户(因为每个用户可能在某个时间点处于非活动状态)。但这将运行第一个选择(与活动用户一起)两次 - 这是非常不需要的。
有没有什么聪明的方法可以只做一个选择来获得所需的查询?想法?
提前谢谢了!