如何找出在特定时间间隔内未激活特定RoleID的用户?

时间:2019-11-15 14:36:09

标签: sql sql-server tsql

下面的查询将告诉我在一个时间范围内有多少非活跃用户。

USE Database
SELECT u.*
FROM [dbo].[tbl_Users] u
WHERE NOT EXISTS (SELECT 1
                  FROM [dbo].[CaseTable] ct
                  WHERE c.tUserID = u.UserID AND ct.CreationDate between '2019-01-01' and '2019-12-31' 
             );

以下查询将告诉我具有我要寻找的特定角色ID的用户。

Use Database;

SELECT UserID, DepartmentID, RoleId
FROM tbl_UsersBelongsTo
WHERE RoleID=6

如何整合两个查询并从本质上获得所需的信息?我猜想它带有一个JOIN子句,但是如何?

3 个答案:

答案 0 :(得分:0)

请尝试使用如下所示的内部联接:

SELECT u.*
FROM [dbo].[tbl_Users] u
INNER JOIN 
(
   SELECT UserID
   FROM tbl_UsersBelongsTo
   WHERE RoleID=6
) x ON u.UserID = x.UserID
WHERE NOT EXISTS (SELECT 1
                  FROM [dbo].[CaseTable] ct
                  WHERE c.tUserID = u.UserID AND ct.CreationDate between '2019-01-01' and '2019-12-31' 
             );

答案 1 :(得分:0)

我认为您只想要join或其他exists

SELECT u.*
FROM [dbo].[tbl_Users] u
WHERE NOT EXISTS (SELECT 1
                  FROM [dbo].[CaseTable] ct
                  WHERE ct.tUserID = u.UserID AND
                        ct.CreationDate between '2019-01-01' and '2019-12-31' 
             ) AND
     EXISTS (SELECT 1
             FROM tbl_UsersBelongsTo ubt
             WHERE ubt.RoleID = 6 AND ubt.userId = u.userId
            );

答案 2 :(得分:0)

您可以阅读有关JOINS here的更多信息。

如果我正确理解了该问题-您正在使用2个不同的数据库,而第二个数据库的名称为pisacara。只要这些数据库位于同一服务器上,并且两个数据库使用相同的凭据,就可以从SQL Server中的不同数据库中联接表。

假设tbl_Users表也有一个UserID字段,查询将看起来像这样:

SELECT u.*
FROM [1st_database_name].[dbo].[tbl_Users] u
INNER JOIN [piscara].[dbo].[tbl_UsersBelongsTo] a
ON u.UserID = a.UserID
WHERE NOT EXISTS (SELECT 1
                  FROM [1st_database_name].[dbo].[CaseTable] ct
                  WHERE c.tUserID = u.UserID 
                  AND ct.CreationDate BETWEEN'2019-01-01' AND'2019-12-31' 
             )
AND a.RoleID=6;

您还可以尝试将第二个查询作为子查询放在WHERE子句中,如下所示:

SELECT u.*
FROM [1st_database_name].[dbo].[tbl_Users] u
WHERE NOT EXISTS (SELECT 1
                  FROM [1st_database_name].[dbo].[CaseTable] ct
                  WHERE c.tUserID = u.UserID 
                  AND ct.CreationDate BETWEEN'2019-01-01' AND'2019-12-31' 
             )
AND u.UserID IN (SELECT UserID
                FROM [piscara].[dbo].[tbl_UsersBelongsTo]
                WHERE RoleID=6);