Сценарий SQL для JIRA - Как включить учетные записи пользователей и не вошедшие в учетные записи - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь написать запрос SQL, который отслеживает использование учетной записи в JIRA.Я все еще довольно новичок, когда дело доходит до SQL, поэтому, пожалуйста, потерпите меня :)

Я могу получить количество входов в систему для пользователей, которые вошли в систему. Однако мне не очень повезло, включаяучетные записи, которые никогда не использовались.

Ниже приведен пример таблицы cwd_user_attributes - это таблица, содержащая количество входов в систему, дату последнего входа в систему и т. Д. Как только пользователь входит в систему, "входит в систему.count " появится в столбце attribute_name .Однако, если пользователь никогда не входил в систему, например user_id 19313 (AKA user 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_value, когда строка 'login.count' присутствует в столбце имя_атрибута И будеттакже возвращает результат '0' , если нет 'login.count' строки.

Это то, что у меня есть до сих пор.К сожалению, и понятно, что это не касается моего пользователя 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 |
+-----------+-------------+-------------------------+-------------------------+

Проведя тонну исследований, я подумал, что предложение "WHIS EXISTS" будет моим лучшимставка.И, если я удаляю * "(ua.attribute_name = 'login.count')" из предложения WHERE, он возвращает всех пользователей (ууу!), Но также возвращает все атрибуты_имя какЧто ж.И очевидно, что это не создает строку «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 |
+-----------+-------------+------------+-----------+

Извиняюсь за роман - постарался включить как можно больше необходимой информации :) Спасибо заранее!

РЕДАКТИРОВАНИЕ2/15/19 Прочитав ответ Чака, я попробую его предложение.Я еще не там, но я, по крайней мере, на правильном пути?Извинения - это все новое для меня.

Спасибо!

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...