oracle 返回最近日期的数据行[重复]

tuwxkamq  于 2023-06-22  发布在  Oracle
关注(0)|答案(2)|浏览(166)

此问题已在此处有答案

Fetch the rows which have the Max value for a column for each distinct value of another column(35个回答)
6天前关闭
我正在使用Oracle SQL并试图返回依赖于most_recent_date的最新category。我能够成功地提取most_recent_date per category per part no/niin,但我无法获得所需的完整结果。
我有以下查询:

SELECT DISTINCT
    contract,
    part_no,
    niin,
    category,
    MAX(date_entered) OVER(PARTITION BY contract, part_no, niin, category) most_recent_date
FROM
    ( **inner query** )

当前结果:

CONTRACT    PN  NIIN 1T 01-AUG-08
CONTRACT    PN  NIIN 7T 19-APR-22

我的最终结果只需要具有最近日期的行。下面需要的行:

CONTRACT    PN  NIIN 7T 19-APR-22

我尝试再次嵌套select语句,然后尝试选择最近的一行,但仍然收到相同的2行。我还尝试在category的分组语句中使用most_recent_date,但也不起作用。
我相信这是个简单的解决办法,但我找不到。

ncecgwcz

ncecgwcz1#

在Oracle中,您可以使用group bykeep语法来获取与最新日期对应的类别:

select contract, part_no, niin, 
    max(date_entered) last_date,
    max(category) keep(dense_rank last order by date_entered) last_category
from ....
group by contract, part_no, niin
vojdkbi0

vojdkbi02#

ROW_NUMBER函数根据输入日期的顺序为每行分配一个数字,每个类别从1开始。因此,每个类别中具有最近日期的行将具有数字1。
在外部查询中,我们只选择分配的编号为1的行。这意味着我们为每个类别选择具有最新日期的行。

SELECT CONTRACT, PN, NIIN, CATEGORY, DATE_ENTERED
FROM (
    SELECT
        CONTRACT,
        PN,
        NIIN,
        CATEGORY,
        DATE_ENTERED,
        ROW_NUMBER() OVER (PARTITION BY CONTRACT, PN, NIIN, CATEGORY ORDER BY DATE_ENTERED DESC) AS rn
    FROM
        ( **inner query** )
) subquery
WHERE rn = 1;

相关问题