[英]SQL Query with MIN function is Returning Multiple Rows
我正在尝试从表中选择日期最少的一行的估计小时数。
SELECT prev_est_hrs
FROM ( SELECT MIN(change_date), prev_est_hrs
FROM task_history
WHERE task_id = 5
GROUP BY prev_est_hrs
);
但是,这将返回两行,为什么呢? 我以为MIN应该只返回最低价?
帮助非常感谢。
您有一个GROUP BY
子句。 MIN
将返回每个组中的最小值。
另外,您只从外部SELECT返回按值分组。
米奇是对的。 使用最早的change_date
来获取记录的prev_est_hrs
一种方法(似乎就是您要查找的内容)是使用analytic函数 :
SELECT prev_est_hrs
FROM (
SELECT prev_est_hrs, ROW_NUMBER() OVER (ORDER BY change_date) AS rn
FROM task_history
WHERE task_id = 5
)
WHERE rn = 1;
如果您有两行具有相同的日期,则需要考虑会发生什么。 这将随机选择其中之一。 如果还有其他条件可以用来打破平局,可以将其添加到order by
子句中。 如果在这种情况下想要所有匹配的行,则可以使用rank()
代替; 再看一下dense_rank()
,它们都有自己的位置。
使用此查询可以做到这一点:
SELECT max(prev_est_hrs) keep (dense_rank first order by change_date)
FROM task_history
WHERE task_id = 5;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.