sql - Oracle 子查询前 1 个结果

标签 sql oracle sql-order-by subquery greatest-n-per-group

我想为 b 的每个唯一值获取前 1 行,并为 b 的特定值获取 c 的最小值。即使可以有超过 1 行具有相同的最小值(只需选择第一行)

我的表

  • 整数(唯一)
  • b 整数
  • c 整数

  • 我试过这个查询
    SELECT t1.* 
      FROM myTable t1, 
           (SELECT b, 
                   MIN(c) as c 
              FROM myTable 
          GROUP BY b) t2 
     WHERE t1.b = t2.b 
       AND t1.c = t2.c
    

    但是,在此表中,对于给定的 b 值,c 的最小值可能有 1 个以上的实例。上述查询在这些条件下生成重复项。

    我有一种感觉,我需要在某处使用 rownum,但我不太确定在哪里。

    最佳答案

    您可以使用 ROW_NUMBER :

    SELECT *
    FROM (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY b ORDER BY c) AS rn
        FROM myTable
    ) AS T1
    WHERE rn = 1
    

    关于sql - Oracle 子查询前 1 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716438/

    相关文章:

    database - 甲骨文公共(public)服务器

    performance - 甲骨文 : table with unused columns impact performance?

    mysql - MYSQL中的数据排序问题

    mysql - 解释为什么mysql查询结果看起来像分组数据

    sql - 如何捕获 Firebird SQL 查询?

    php - 直接从 Controller 运行 sql 查询

    sql - 我应该调用什么顺序 @@ROWCOUNT/@@ERROR

    java - 从可调用语句 OUT 参数中检索意外的 null

    sql - ORDER BY 在计算列上无法正常工作?

    sql - 如何在Snowflake中使用SQL对 "version"字符串进行排序?