如何获得最新的值?

pvcm50d1  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(264)

我想把最近更新的台词拉进来。我尝试在select语句中使用max函数,但得到的结果与执行select*时相同:

select max(last_update_date),vendor_id, last_update_date, last_updated_by , VENDOR_SITE_CODE
from POZ_SUPPLIER_SITES_ALL_M
group by vendor_id, last_update_date, last_updated_by, VENDOR_SITE_CODE

这是表格:

这就是我想要的结果:

我必须使用什么条件或函数才能得到我想要的结果?

piwo6bdm

piwo6bdm1#

你可以用 row_number 达到你的预期效果。

select 
    vendor, 
    vendor_site
    last_update_date, 
    last_updated_by
from    
(
    select 
        vendor, 
        vendor_site
        last_update_date, 
        last_updated_by, 
        row_number() over (partition by vendor, vendor_site order by last_update_date desc) as rnk
    from POZ_SUPPLIER_SITES_ALL_M
) val
where rnk = 1
06odsfpq

06odsfpq2#

一种方法使用相关子查询:

select t.*
from t
where t.lastupdateddate = (select max(t2.lastupdateddate)
                           from t t2
                           where t2.vendor = t.vendor and t2.vendorsite = t.vendorsite
                          );

另一种方法使用聚合和 keep :

select vendor, vendorsite, max(lastupdateddate),
       max(lastupdatedby) keep (dense_rank first order by lastupdateddate desc) as lastupdatedby
from t
group by vendor, vendorsite;

这个 keep 表达是甲骨文(相当冗长)说“第一”的方式。
当然,还有 row_number() 同样的方法。

相关问题