按最近日期订单日期-SQL选择单个ID

时间:2016-03-27 19:19:56

标签: sql oracle

我有一张看起来像这样的表

Indvdl_Store_ID     Indvdl_ID     Order_ID     Order_Date 
    101               123         A000         12/24/2011 
    101               241         B002         01/01/2013
    101               201         Y180         01/01/2016 

由于我们具有与3个不同Indvdl_ID相关联的相同Indvdl_Store_ID,因此我想基于订单日期为该Indvdl_StoreID选择/保留最新的个人ID,但仍保留与Indvdl_Store_ID相关联的所有订单。所以我希望我的最终结果看起来像这样

Indvdl_Store_ID     Indvdl_ID     Order_ID     Order_Date 
    101               201         A000         12/24/2011 
    101               201         B002         01/01/2013
    101               201         Y180         01/01/2016

我尝试使用row_number进行重复数据删除,然后将最终结果加回到Indvdl_store_ID上的表中,但我似乎仍然遇到问题,得到了正确的结果。我将不胜感激任何帮助或建议。

提前致谢!

2 个答案:

答案 0 :(得分:3)

Oracle安装程序

CREATE TABLE table_name (Indvdl_Store_ID, Indvdl_ID, Order_ID, Order_Date ) AS
SELECT 101, 123, 'A000', DATE '2011-12-24' FROM DUAL UNION ALL 
SELECT 101, 241, 'B002', DATE '2013-01-01' FROM DUAL UNION ALL
SELECT 101, 201, 'Y180', DATE '2016-01-01' FROM DUAL;

<强>查询

SELECT Indvdl_Store_ID,
       MAX( Indvdl_ID ) KEEP ( DENSE_RANK LAST ORDER BY ORDER_DATE )
                        OVER ( PARTITION BY INDVDL_STORE_ID )
           AS Indvdl_ID,
       Order_ID,
       Order_Date
FROM   table_name;

<强>输出

INDVDL_STORE_ID  INDVDL_ID ORDER_ID ORDER_DATE        
--------------- ---------- -------- -------------------
            101        201 A000     2011-12-24 00:00:00 
            101        201 Y180     2016-01-01 00:00:00 
            101        201 B002     2013-01-01 00:00:00 

答案 1 :(得分:0)

可以使用内部联接和分组

select  b.Order_Date,  max(a.Indvdl_Store_ID), max( a.Indvdl_ID), b.Order_ID  
from my_table as b 
inner join my_table as a on  a.Indvdl_ID = b.Indvdl_ID
group by b.Order_Date