Ich möchte diese Query abfragen kombinieren. Confluence letzte Anmeldezeiten
WITH last_login_date AS
(SELECT user_id
, to_timestamp(CAST(cua.attribute_value AS double precision)/1000) AS last_login
FROM cwd_user_attribute cua
WHERE cua.attribute_name = 'lastAuthenticated'
AND to_timestamp(CAST(cua.attribute_value AS double precision)/1000) < (CURRENT_DATE))
SELECT c.user_name
, l.last_login
FROM cwd_user c
INNER JOIN last_login_date l ON (c.id = l.user_id)
INNER JOIN cwd_membership m ON (c.id = m.child_user_id)
INNER JOIN cwd_group g ON (m.parent_id = g.id)
WHERE g.group_name = 'confluence-users'
ORDER BY last_login DESC;
und diese
Confluence Aktive User mit Lizenz
SELECT u.lower_user_name, d.directory_name
FROM cwd_user u
JOIN cwd_membership m ON u.id = child_user_id
JOIN cwd_group g ON m.parent_id = g.id
JOIN SPACEPERMISSIONS sp ON g.group_name = sp.PERMGROUPNAME
JOIN cwd_directory d on u.directory_id = d.id
WHERE sp.PERMTYPE='USECONFLUENCE' AND u.active = 'T' AND d.active = 'T'
GROUP BY u.lower_user_name, d.directory_name
ORDER BY d.directory_name;
Ich möchte den letzten Login und den Benutzername und er soll mir nur Benutzer anzeigen die eine Lizenz besitzen.
Wie genau willst Du die kombinieren? Du kannst spacepermissions und cwd_directory doch zu Deiner ersten Abfrage dazu JOINen.
So was in der Art:
WITH last_login_date AS (
SELECT user_id
, to_timestamp(CAST(cua.attribute_value AS double precision)/1000) AS last_login
FROM cwd_user_attribute cua
WHERE cua.attribute_name = 'lastAuthenticated'
AND to_timestamp(CAST(cua.attribute_value AS double precision)/1000) < CURRENT_DATE
)
SELECT c.user_name, l.last_login, d.directory_name
FROM cwd_user c
JOIN last_login_date l ON (c.id = l.user_id)
JOIN cwd_membership m ON (c.id = m.child_user_id)
JOIN cwd_group g ON (m.parent_id = g.id)
JOIN spacepermissions sp ON g.group_name = sp.permgroupname
JOIN cwd_directory d on c.directory_id = d.id
WHERE g.group_name = 'confluence-users'
and sp.PERMTYPE='USECONFLUENCE'
AND u.active = 'T'
AND d.active = 'T'
ORDER BY l.last_login DESC;
Das ist aber nicht, was das CTE “last_login_date” macht. Das müsstest Du so abändern:
SELECT DISTINCT ON (user_id)
user_id,
to_timestamp(CAST(cua.attribute_value AS double precision)/1000) AS last_login
FROM cwd_user_attribute cua
WHERE cua.attribute_name = 'lastAuthenticated'
AND to_timestamp(CAST(cua.attribute_value AS double precision)/1000) < CURRENT_DATE
ORDER BY user_id, to_timestamp(CAST(cua.attribute_value AS double precision)/1000) DESC
Zwischenfrage,
ist es möglich in dieser SQL Abfrage die order by Richtung l.last_login DESC durch einen Parameter in l.last_login zu verändern
falls ja wäre es toll zu erfahren wie ich das zustande bringen kann
Du könntest mir order by case when arbeiten, wenn Du eine Bedingung in den Zeilen hast, die die Order angibt. Zum Sortieren brauchst Du dann noch verschiedene Spalten deren Inhalt umgekehrt ist, die Sortierfolge bleibt dabei konstant.
Ansonsten muss es mit einer formatierten SQL Anweisung in einer SP gemacht werden glaub ich.