Показать задачи, которые занимают больше всего времени sql - PullRequest
0 голосов
/ 11 декабря 2018

Мне нужно показать задачи, которые заняли больше всего времени.Пока у меня есть: (Но я знаю, что это не работает, так как когда я за круглыми столами, мои результаты показывают как 1, так и 2 месяца, когда он должен показывать только 2, так как 2 месяца - самое длительное время работы

SELECT t.task_name,  max(round(months_between  t.start_date,  t.end_date)), e.employee_id, e.task_id
FROM task t, employee e
WHERE t.task_id = e.task_id;

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Порядок по убыванию разницы, используйте FETCH FIRST, чтобы получить строку с максимальной разницей.Добавьте WITH TIES, чтобы получить галстуки.

SELECT t.task_name, t.end_date - t.start_date AS diff, e.employee_id, e.task_id,
FROM task t
INNER JOIN employee e
    ON t.task_id = e.task_id
ORDER BY diff DESC
FETCH FIRST 1 ROW WITH TIES
0 голосов
/ 11 декабря 2018

Если вы хотите найти задачу или задачи (если есть связь), то мы можем попробовать использовать аналитическую функцию ранга:

WITH cte AS (
    SELECT t.task_id, t.task_name, SUM(t.end_date - t.start_date) AS days_spent,
        RANK() OVER (ORDER BY SUM(t.end_date - t.start_date) DESC) rnk
    FROM task t
    INNER JOIN employee e
        ON t.task_id = e.task_id
    GROUP BY t.task_id, t.task_name
)

SELECT task_id, task_name, days_spent
FROM cte
WHERE rnk = 1;

Этот ответ предполагает, что общее время, затраченное на данныйЗадача состоит из времени, потраченного отдельными сотрудниками, связанными с этой задачей.Следовательно, нам нужно агрегировать по задачам в CTE, чтобы это работало.

...