【问题标题】:SQL: Show records where calculated field is MAX valueSQL:显示计算字段为最大值的记录
【发布时间】:2021-04-13 18:34:06
【问题描述】:

在下面的示例中,我使用代码创建“总计”列。我只想保留总数最高的每个 ID 的记录。所以记录 3 和 4 应该是输出表中的唯一结果。

SELECT ID, ObsPer, col1, col2, col3, SUM(col1,col2,col3) AS total
FROM mytable

由于“total”是一个计算字段,我如何添加一个只为每个“ID”带回最高“total”值的命令。

我是这个东西的新手,所以如果我解释得不够好,请原谅!

ID ObsPer col1 col2 col3 total
1 201903 01 3 4 2 9
1 201903 02 7 4 4 15
1 201903 03 6 4 9 19
2 201904 01 6 2 9 17
2 201904 02 4 2 5 11
2 201904 03 3 2 2 7

我认为它可能是 WHERE 或 HAVING 命令,但我尝试过的总是出错。

预期结果

ID ObsPer col1 col2 col3 total
1 201903 03 6 4 9 19
2 201904 01 6 2 9 17

【问题讨论】:

  • 您对SUM() 的使用令人困惑。您没有聚合查询,它不合适。

标签: sql calculated-columns


【解决方案1】:

这看起来像窗口函数:

SELECT t.*
FROM (SELECT ID, ObsPer, col1, col2, col3, 
             (col1 + col2 + col3) AS total,
             ROW_NUMBER() OVER (PARTITION BY ID ORDER BY col1 + col2 + col3 DESC) as seqnum
      FROM mytable
     ) t
WHERE seqnum = 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2015-12-03
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多