我正在尝试从表中选择具有最低日期的行的估计小时数。
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应该只返回最低价?
非常感谢。
答案 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;