如何使用 Oracle 11 查询数据

How to query data with Oracle 11

我正在努力查询数据作为示例

----------
Date of Transaction  Customer_ID    Customer_Register_Status
20/09/2015            123              NEW
21/09/2015            123              Activate
22/09/2015            123              Activate
23/09/2015            123              Suspense
24/09/2015            123              Suspense
25/09/2015            123              Activate
26/09/2015            123              Activate
27/09/2015            123              Activate
28/09/2015            123              Activate
29/09/2015            123              Activate
30/09/2015            123              Activate
26/09/2015            123              Activate
27/09/2015            ABC              NEW
28/09/2015            ABC              NEW
29/09/2015            ABC              NEW
30/09/2015            ABC              NEW
01/09/2015            ABC              NEW
02/09/2015            ABC              NEW

我的愿望结果

Date of Transaction  Customer_ID    Customer_Register_Status
25/09/2015            123              Activate
27/09/2015            ABC              NEW

规则是结果

请指导我如何创建查询以获得结果

您想要最后状态的第一个日期。 . .即切换到最后状态的日期。

这是一种执行以下操作的方法:

  • 在状态改变时创建一个标志。
  • 对标志进行正向求和以创建 grp 以识别具有相同状态的相邻行。
  • 计算每个客户的最大日期。
  • 按客户和 grp 进行聚合,仅保留最大日期与客户最大日期匹配的组。

SQL是:

select t.customer_id, min(dte), status
from (select dte, customer_id, status,
             sum(case when prev_status = status then 0 else 1 end) over (partition by customer_id) as statusgrp,
             max(dte) over (partition by customer_id) as maxdte
      from (select t.*,
                   lag(status) over (partition by customer_id order by dte) as prev_status
            from table t
           ) t
      ) t
group by customer_id, statusgrp, status, maxdte
having max(dte) = maxdte;