Question

I am using SQL Server 2008 R2.

I am having three tables in my database are having many-to-many relationship as below.

TblServiceLevel     
Id  ServiceLevel    Code
1   C               1
2   R               1
3   V               1
4   R Test          4
5   C Test          4
6   S               2
7   K               3


TblUser 
Id  Name
1   A
2   B
3   C
4   D
5   E
6   F


TblUserServiceLevel         
Id  UserId  ServiceLevelId  Status
1   1       1               Active
2   1       1               Deactive
3   2       3               Active
4   3       4               Active
5   1       5               Active
6   5       1               Active
7   2       3               Deactive
8   3       4               Deactive
9   5       1               Deactive
10  2       3               Active
11  3       4               Active
12  4       1               Active

Now,

From this tables, I want distinct users that are exists in TblUserServiceLevel and having latest service level ="Active" and ServiceLevel.Code <> 4.

Can anyone help me?

The result is 2 and 4 user id.

Was it helpful?

Solution

select t1.UserId
from TblUserServiceLevel t1
inner join (
    select UserId, max (Id) as maxId
    from TblUserServiceLevel
    group by UserId
) t2 on t1.UserId = t2.UserId and t1.Id = t2.maxId
inner join TblServiceLevel sl on t1.ServiceLevelId = sl.Id and sl.Code <> 4
where t1.Status = 'Active'
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top