【问题标题】:Group by based on priority in Oracle根据 Oracle 中的优先级分组
【发布时间】:2020-10-12 03:23:27
【问题描述】:

我需要编写一个存储过程或 SQL 语句,需要为 Oracle 数据库运行大约 1M 条记录。这应该根据定义的优先级获取数据。

1 为最高优先级,4 为最低优先级。

当使用客户 ID 对记录进行分组时,它应该只选择根据源名称具有最高优先级的记录,否则移动到该组中的下一个源以获得优先级。

我通过使用 LISTAGG 使用老式方法,然后检查 Source name = A 的值,然后获取所有数据。

有没有更好的方法来提取信息。

输出应仅包含客户 ID 的每个 Group BY 的优先级记录

【问题讨论】:

  • “只选择最高优先级的记录”。那么,1 是最高优先级还是 4?看看你的输出,我猜1 但我真的不应该猜,你应该向我解释你的规则。
  • 不管怎样,这个网站已经有很多类似的问题了:请扫描[oracle]+[greatest-n-per-group]上的一些帖子,了解如何解决您的问题。

标签: sql oracle oracle11g oracle-sqldeveloper


【解决方案1】:

可以使用解析函数ROW_NUMBER如下:

SELECT * FROM
(SELECT T.*, ROW_NUMBER() OVER (PARTITION BY T.CUSTID ORDER BY P.PRIORITY) AS RN 
FROM YOUR_TABLE T JOIN PRIORITY_TABLE P
ON T.SOURCE_NAME = P.SOURCE_NAME)
WHERE RN = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2023-02-10
    • 2011-04-04
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多