【问题标题】:SQL Query with MIN function is Returning Multiple Rows带有 MIN 函数的 SQL 查询返回多行
【发布时间】:2013-12-31 15:03:21
【问题描述】:

我正在尝试从表格中选择日期最短的行的预计小时数。

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

非常感谢您的帮助。

【问题讨论】:

    标签: sql oracle select group-by min


    【解决方案1】:

    您有一个GROUP BY 子句。 MIN 将返回每组中的最小值。

    另外,您只是从外部 SELECT 中按值返回分组。

    【讨论】:

      【解决方案2】:

      米奇是对的。使用最早的change_date 记录prev_est_hrs 的一种方法是使用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(),他们都有自己的位置。

      【讨论】:

        【解决方案3】:

        使用这个查询来做到这一点:

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

        【讨论】:

          猜你喜欢
          • 2023-02-04
          • 2021-11-29
          • 1970-01-01
          • 2011-01-17
          • 1970-01-01
          • 2016-07-26
          • 1970-01-01
          • 2012-10-29
          • 2012-05-27
          相关资源
          最近更新 更多