我有一张看起来像这样的表
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上的表中,但我似乎仍然遇到问题,得到了正确的结果。我将不胜感激任何帮助或建议。
提前致谢!
答案 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