【问题标题】:SQL to find best row in group based on multiple columns?SQL基于多列查找组中的最佳行?
【发布时间】:2019-07-23 13:23:17
【问题描述】:

假设我有一个包含不同类别度量的 Oracle 表:

CREATE TABLE measurements (
  category CHAR(8),
  value NUMBER,
  error NUMBER,
  created DATE
)

现在我想在每个类别中找到“最佳”行,其中“最佳”的定义如下:

  • 它的错误率最低。
  • 如果有多个测量值具有相同的误差,则最近创建的那个被认为是最好的。

这是greatest N per group 问题的变体,但包括两列而不是一列。如何在 SQL 中表达这一点?

【问题讨论】:

    标签: sql oracle greatest-n-per-group


    【解决方案1】:

    使用ROW_NUMBER:

    WITH cte AS (
        SELECT m.*, ROW_NUMBER() OVER (PARTITION BY category ORDER BY error, created DESC) rn
        FROM measurements m
    )
    
    SELECT category, value, error, created
    FROM cte
    WHERE rn = 1;
    

    为了简要说明,PARTITION BY 子句指示 DB 为同一类别中的每组记录生成单独的行号。 ORDER BY 子句将那些具有 smallest 错误的记录放在首位。如果同一类别中的两个或多个记录以最低错误并列,则下一个排序级别会将具有最近创建日期的记录放在首位。

    【讨论】:

      猜你喜欢
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2023-02-03
      • 1970-01-01
      相关资源
      最近更新 更多