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

时间:2013-12-12 23:34:21

标签: sql oracle select group-by min

我正在尝试从表中选择具有最低日期的行的估计小时数。

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应该只返回最低价?

非常感谢。

3 个答案:

答案 0 :(得分:3)

你有一个GROUP BY条款。 MIN将返回每个组中的最小值。

此外,您只是从外部SELECT返回值。

答案 1 :(得分:0)

米奇是对的。获取最早prev_est_hrs的记录的change_date的一种方法是analytic function

,这似乎是您要查找的内容。
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(),他们都有自己的位置。

答案 2 :(得分:0)

使用此查询执行此操作:

SELECT max(prev_est_hrs) keep (dense_rank first order by change_date)
FROM task_history
WHERE task_id = 5;