显示耗时最长的任务 sql

Show tasks which have taking the longest time sql

我需要显示完成时间最长的任务。到目前为止我有: (但我知道它不起作用,因为当我轮询表格时我的结果显示 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;

如果你想找到一个或多个任务(如果有平局),那么我们可以尝试使用排名分析函数:

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 中按任务聚合才能使其正常工作。

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