繁体   English   中英

带MIN函数的SQL查询返回多行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM