JIRA的SQL脚本-如何同时包含用户登录计数和未登录帐户

时间:2019-02-14 21:06:35

标签: sql jira

我正在尝试编写一个SQL查询来跟踪JIRA中的帐户使用情况。对于SQL来说,我还是一个新手,所以请忍受:)

我能够获取已登录用户的登录计数。但是,我运气不佳,包括从未使用过的帐户。

下面是 cwd_user_attributes表的示例-该表包含登录计数,上次登录日期等。用户登录后,“ login.count” 将显示在 attribute_name 列下。但是,如果用户从未登录过,例如user_id 19313(又名Dave用户),则'login.count'不存在。


+-------+---------+-------------------------------+-----------------+
|  ID   | user_id |        attribute_name         | attribute_value |
+-------+---------+-------------------------------+-----------------+
| 17378 |   10000 | lastAuthenticated             | 1524069213477   |
| 17382 |   10000 | login.count                   | 2576            |
| 17380 |   10000 | login.lastLoginMillis         | 1524069213493   |
| 17377 |   10000 | requiresPasswordChange        | FALSE           |
| 23542 |   16714 | lastAuthenticated             | 1525888024307   |
| 23549 |   16714 | login.count                   | 1927            |
| 23548 |   16714 | login.lastLoginMillis         | 1525888024322   |
| 23537 |   16714 | requiresPasswordChange        | FALSE           |
| 27555 |   19313 | password.reset.request.expiry | 1494599702231   |
| 27554 |   19313 | passwordLastChanged           | 1494513302168   |
| 27552 |   19313 | requiresPasswordChange        | FALSE           |
+-------+---------+-------------------------------+-----------------+

我正在尝试编写一个查询,该查询将在 attribute_name 列中出现'login.count'行时返回attribute_value,并且还将返回结果如果没有'login.count'行,则为'0'

这是我到目前为止所拥有的。不幸的是,可以理解的是,这不包括我的19313 / Dave用户。

SELECT 
    u.user_name AS [USER NAME]
    ,m.parent_name AS [GROUP]
    ,ua.attribute_value AS [LOGIN COUNT]
    ,u.updated_date AS [LAST LOGIN]
    ,u.created_date AS [CREATED]
FROM     jira.cwd_user AS u LEFT JOIN
                  jira.cwd_user_attributes AS ua ON u.ID = ua.user_id LEFT JOIN
                  jira.cwd_membership AS m ON u.ID = m.child_id AND u.directory_id = m.directory_id LEFT JOIN
                  jira.cwd_directory AS d ON m.directory_id = d.ID
WHERE  (d.active = '1') AND (u.active = '1') AND (m.parent_name <> 'non-jira-users') AND (ua.attribute_name = 'login.count')

结果


+-----------+-------------+-------------------------+-------------------------+
| USER NAME | LOGIN COUNT |       LAST LOGIN        |         CREATED         |
+-----------+-------------+-------------------------+-------------------------+
| Mark      |        2576 | 2012-09-26 17:06:11.400 | 2012-09-26 17:06:11.400 |
| Joe       |        1927 | 2016-06-21 11:41:03.897 | 2016-04-19 13:31:21.847 |
+-----------+-------------+-------------------------+-------------------------+

经过大量研究,我认为“何时存在” 子句是我最好的选择。而且,如果我从WHERE子句中删除 *“(ua.attribute_name ='login.count')” ,它将返回所有用户(是的!),但它还会返回所有attribute_names也一样显然,这不会创建“ login.count”行...

SELECT 
    u.user_name AS [USER NAME]
    ,m.parent_name AS [GROUP]
    ,CASE
            WHEN EXISTS
                (SELECT ua.attribute_value
                WHERE ua.attribute_name = 'login.count')
                THEN ua.attribute_value
                ELSE 0
        END AS [LOGIN COUNT]
    ,u.updated_date AS [LAST LOGIN]
    ,u.created_date AS [CREATED]
FROM     jira.cwd_user AS u LEFT JOIN
                  jira.cwd_user_attributes AS ua ON u.ID = ua.user_id LEFT JOIN
                  jira.cwd_membership AS m ON u.ID = m.child_id AND u.directory_id = m.directory_id LEFT JOIN
                  jira.cwd_directory AS d ON m.directory_id = d.ID
WHERE  (d.active = '1') AND (u.active = '1') AND (m.parent_name <> 'non-jira-users')

结果


+-----------+-------------+------------+-----------+
| USER NAME | LOGIN COUNT | LAST LOGIN |  CREATED  |
+-----------+-------------+------------+-----------+
| Mark      |           0 | 9/26/2012  | 9/26/2012 |
| Mark      |           0 | 9/26/2012  | 9/26/2012 |
| Mark      |        2576 | 2/14/2019  | 9/26/2012 |
| Mark      |           0 | 9/26/2012  | 9/26/2012 |
| Joe       |        1927 | 2/14/2019  | 4/19/2016 |
| Joe       |           0 | 6/21/2016  | 4/19/2016 |
| Joe       |           0 | 6/21/2016  | 4/19/2016 |
| Joe       |           0 | 6/21/2016  | 4/19/2016 |
| Dave      |           0 | 5/11/2017  | 5/11/2017 |
| Dave      |           0 | 5/11/2017  | 5/11/2017 |
| Dave      |           0 | 5/11/2017  | 5/11/2017 |
+-----------+-------------+------------+-----------+

我正在努力达到以下最终目标:


+-----------+-------------+------------+-----------+
| USER NAME | LOGIN COUNT | LAST LOGIN |  CREATED  |
+-----------+-------------+------------+-----------+
| Mark      |        2576 | 9/26/12    | 9/26/12   |
| Joe       |        1927 | 6/21/16    | 4/19/16   |
| Dave      |           0 | NULL       | 5/11/2017 |
+-----------+-------------+------------+-----------+

这本小说的道歉-试图包含尽可能多的相关信息:)预先谢谢您!

已编辑19/2/15 阅读Chuck的回复后,我正在尝试他的建议。我还没到那儿,但是我至少在正确的轨道上吗?抱歉-这对我来说是新的。

谢谢!

SELECT
    u.user_name AS [USER NAME]
    ,ua.attribute_value AS [LOGIN COUNT]
    ,u.updated_date AS [LAST LOGIN]
    ,u.created_date AS [CREATED]
FROM    dbo.cwd_user AS u LEFT JOIN
        dbo.cwd_user_attributes AS ua ON u.ID = ua.user_id

LEFT JOIN

(SELECT 
    ,CASE
        WHEN EXISTS
            (
                SELECT ua1.attribute_value
                WHERE ua1.attribute_name = 'login.count'
            )
            THEN ua1.attribute_value
        ELSE 0
        END AS [LOGIN COUNT]
FROM    dbo.cwd_user AS u1 LEFT JOIN
        dbo.cwd_user_attributes AS ua1 ON u1.ID = ua1.user_id
) AS sq

ON ua.attribute_value = sq.attribute_value
WHERE (u.active = '1') AND (ua.attribute_name = 'login.count')

0 个答案:

没有答案