【问题标题】:How to select only 1 row if duplicate rows (Oracle) [duplicate]如果重复行(Oracle)[重复],如何仅选择 1 行
【发布时间】:2020-05-15 04:32:35
【问题描述】:

我有一个表格,其中包含如下订单信息:

从该表中我们可以看出,每个 order_no 都有多个重复项。所以我想要的是每个 order_no 只保留一行(无论哪个)

有人知道怎么做吗?(我试过'distinct',但是那些重复行的某些列是不同的,所以'distinct'不能在这里工作)

【问题讨论】:

  • 第 1 步 - 决定你想要哪一行。
  • 这里有一些关于如何在未来提出问题的提示。例如不要发布您的数据图像。我不会重新输入它,所以如果您想要经过测试而不是仅仅概念化的答案,您应该包括一种方式让我们拥有测试数据,例如 DML 语句。 meta.stackexchange.com/questions/5234/…
  • 您在 21 小时内发布了 3 次相同的问题。为什么???您第一次发布时有两个答案;如果它们不够好,您应该在原始帖子中这么说。
  • @sen 您希望将哪些行保留在重复行中?

标签: sql oracle


【解决方案1】:

大概是这样的吧?您可以使用PARTITION BYORDER BY 子句来确定返回哪一行。航空代码:

SELECT t.*
FROM (
     SELECT o.*
          , ROW_NUMBER() OVER (PARTITION BY o.order_no ORDER BY o.sequence_no) rn
     FROM ordertable o
     ) t
WHERE rn = 1
;

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,这个查询对我有用。

    WITH summary
           AS (SELECT   g.*,
                        ROW_NUMBER ()
                           OVER (PARTITION BY g.param_text
                                 ORDER BY g.gnl_param_id DESC)
                           AS rk
                 FROM  gnl_param g)
    SELECT   s.gnl_param_id, s.param_text
      FROM   summary s
     WHERE   s.rk = 1
    

    在这里,param_text 列应该是唯一的,但不知何故出现了重复的行。这就是我在本专栏中使用按关键字分区的原因。

    【讨论】:

      【解决方案3】:
      SELECT *
      FROM
          (
             SELECT *
                ,ROW_NUMBER() OVER (PARTITION BY ORDER_NO ORDER BY ????) as RowNumber
             FROM
                Orders
          ) o
      WHERE
          o.RowNumber = 1
      

      只需填写 order by 子句以选择您想成为第一行的记录。如果您不关心哪个记录的顺序,则将行更改为

      ,ROW_NUMBER() OVER (PARTITION BY ORDER_NO ORDER BY Null) as RowNumber
      

      https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions137.htm

      我假设由于 ORDER BY NULL 而投反对票?但甲骨文接受它 tsql (sql-server) 不接受。看到这个答案:

      what does this mean "order by NULL"

      【讨论】:

      • 为什么投反对票?
      猜你喜欢
      • 1970-01-01
      • 2014-04-17
      • 2020-10-16
      • 2020-07-27
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2017-05-04
      相关资源
      最近更新 更多