Home > database >  SQL Oracle - Filter on Rank/Window Partition
SQL Oracle - Filter on Rank/Window Partition

Time:06-16

I have a table of receiving events by item and branch (skul) and I'm trying to pull only the most recent receipt date for each skul. I'm having trouble with an approach for the where clause.

Any help would be appreciated, here is SQL I am using now.

SELECT 
branch||item "skul",
date,
order_num,
RANK () OVER ( 
            PARTITION BY branch||item
            ORDER BY date DESC
        ) "Rank"

FROM    receipts

CodePudding user response:

Rather than partitioning on the concatenation of the branch and item, you should just partition on both those columns:

WITH cte AS (
    SELECT branch, item, "date", order_num,
           RANK() OVER (PARTITION BY branch, item ORDER BY "date" DESC) rnk
    FROM yourTable
)

SELECT branch, item, "date", order_num
FROM cte
WHERE rnk = 1;
  • Related