Zwei Query Abfragen kombinieren

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;

Es ist aber doch einmal FROM cwd_user c und einmal FROM cwd_user u

ERROR:  missing FROM-clause entry for table "u"
LINE 18:     AND u.active = 'T' 
                 ^
SQL state: 42P01
Character: 713

Dann muss Du bei der JOIN Bedingung halt den anderen Alias verwenden.

er zeigt mir aber dann nicht "nur die User an die eine Lizenz" habe.

Er soll ja Benutzer mir anzeigen die eine Aktive Lizenz besitzen und dann den den letzten Login von diesem Benutzer :smiley:

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.

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.