显示花费最长时间sql的任务

时间:2018-12-11 13:31:03

标签: sql oracle top-n

我需要显示完成时间最长的任务。到目前为止,我有: (但是我知道这是行不通的,因为我在圆桌会议时我的结果同时显示了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 :(得分:0)

如果您想查找一个或多个任务(如果有平局),那么我们可以尝试使用等级分析功能:

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中按任务进行汇总以使其起作用。

答案 1 :(得分:0)

按差值降序排列,使用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