2017-02-21 3 views
-1

Ich habe 3 verschiedene Abfragen, die die gleichen Daten anzeigen, aber für unterschiedliche Datumsintervalle. Ich bin mir nicht sicher, wie man die Abfragen am besten kombinieren kann, um alle Daten in einem zu zeigen. Ich bin nicht gut bei Joins oder verschachtelten Abfragen, so dass ich mir nicht sicher bin, wie das am besten funktioniert.Kombinieren Sie 3 Abfragen zu einem, Joins oder geschachtelte Abfragen verwenden?

Grundsätzlich möchte ich 4 Spalten haben: Associate, 30 Tage, 60 Tage und 90 Tage.

Abfrage 1:

SELECT cwd_user.display_name AS 'Associate', sum(worklog.timeworked/3600) AS '30 Days' 
FROM worklog, cwd_user,cwd_membership 
WHERE worklog.AUTHOR = cwd_user.user_name 
and cwd_user.directory_id = cwd_membership.directory_id 
and cwd_user.lower_user_name = cwd_membership.lower_child_name 
and cwd_membership.membership_type = 'GROUP_USER' 
and cwd_membership.lower_parent_name = 'atl_servicedesk_it_agents' 
and worklog.STARTDATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY) 
GROUP BY cwd_user. display_name 
ORDER BY cwd_user.last_name; 

Abfrage 2:

SELECT cwd_user.display_name AS 'Associate', sum(worklog.timeworked/3600) AS '60 Days' 
FROM worklog, cwd_user,cwd_membership 
WHERE worklog.AUTHOR = cwd_user.user_name 
and cwd_user.directory_id = cwd_membership.directory_id 
and cwd_user.lower_user_name = cwd_membership.lower_child_name 
and cwd_membership.membership_type = 'GROUP_USER' 
and cwd_membership.lower_parent_name = 'atl_servicedesk_it_agents' 
and worklog.STARTDATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 60 DAY) 
GROUP BY cwd_user. display_name 
ORDER BY cwd_user.last_name; 

Abfrage 3:

SELECT cwd_user.display_name AS 'Associate', sum(worklog.timeworked/3600) AS '90 Days' 
FROM worklog, cwd_user,cwd_membership 
WHERE worklog.AUTHOR = cwd_user.user_name 
and cwd_user.directory_id = cwd_membership.directory_id 
and cwd_user.lower_user_name = cwd_membership.lower_child_name 
and cwd_membership.membership_type = 'GROUP_USER' 
and cwd_membership.lower_parent_name = 'atl_servicedesk_it_agents' 
and worklog.STARTDATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 90 DAY) 
GROUP BY cwd_user. display_name 
ORDER BY cwd_user.last_name; 
+0

Siehe http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql- Abfrage – Strawberry

Antwort

0

Ungeprüfte ... weil es nichts Gutes auf testen ...

SELECT u.display_name Associate 
    , SUM(CASE WHEN w.startdate BETWEEN NOW() AND NOW() + INTERVAL 30 DAY THEN w.timeworked END/3600) '30 Days' 
    , SUM(CASE WHEN w.startdate BETWEEN NOW() AND NOW() + INTERVAL 60 DAY THEN w.timeworked END/3600) '60 Days' 
    , SUM(CASE WHEN w.startdate BETWEEN NOW() AND NOW() + INTERVAL 90 DAY THEN w.timeworked END/3600) '90 Days' 
    FROM worklog w 
    JOIN cwd_user u 
    ON u.user_name = w.author 
    JOIN cwd_membership m 
    ON m.directory_id = u.directory_id 
    AND m.lower_child_name = u.lower_user_name 
WHERE m.membership_type = 'GROUP_USER' 
    AND m.lower_parent_name = 'atl_servicedesk_it_agents' 
    AND w.startdate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 90 DAY) 
GROUP 
    BY u. display_name 
ORDER 
    BY u.last_name; 
+0

Das hat funktioniert! Du bist unglaublich! Ich wusste nicht, dass ich das so machen kann, aber ich werde das definitiv in Zukunft nutzen! – Cole