2017-02-21 6 views
-1

У меня есть 3 разных запроса, отображающих одни и те же данные, но для разных интервалов дат. Я не уверен в наилучшем способе объединить запросы, чтобы показать все данные в одном. Я не очень хорош при подключении или вложенных запросах, поэтому я не уверен в этом.Объедините 3 запроса в один, используя соединения или вложенные запросы?

В принципе, я хочу иметь 4 столбца: Ассоциированный, 30 дней, 60 дней и 90 дней.

Запрос 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; 

Запрос 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; 

Запрос 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

См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql- query – Strawberry

ответ

0

Непроверено ... потому что не было ничего, чтобы проверить его на ...

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

Это сработало! Ты великолепен! Я не понимал, что могу это сделать, но я обязательно буду использовать это в будущем! – Cole

Смежные вопросы