分类客户是否使用SQL转换了初始邮件或提醒邮件



我一直坚持在Oracle SQL中解决这个问题。我有一个表,看起来像下面。

tbody> <<tr>112222244555555555666677777777778888
cust_id event event_date camp_id email_ind(计算列)
1打开06/09/202180
发送06/09/202180初始
发送14/09/202180提示
点击15/04/202180
打开15/04/202180
发送15/04/202180初始
15/04/202180
WEBSITE_VISIT15/04/202180
3打开01/06/202180
3发送01/06/202180初始
3打开09/06/202180
3发送09/06/202180提示
3点击10/06/202180
3打开10/06/202180
3发送10/06/202180
310/06/202180
3WEBSITE_VISIT10/06/202180
发送06/09/202180初始
发送14/09/202180提示
打开20/09/202180
发送20/09/202180初始
发送28/09/202180提示
点击03/10/202180
打开03/10/202180
发送03/10/202180不是reinder邮件
03/10/202180
WEBSITE_VISIT03/10/202180
打开05/11/202180
打开01-Jun-2180
发送01-Jun-2180初始
打开09-Jun-2180
发送09-Jun-2180提示
打开26-Jul-2180
发送26-Jul-2180初始
点击03-Aug-2180
打开03-Aug-2180
发送03-Aug-2180不是一个提醒邮件
03-Aug-2180
WEBSITE_VISIT03-Aug-2180
点击04-Aug-2180
打开04-Aug-2180
发送04-Aug-2180
打开12-Jul-2180
发送12-Jul-2180初始
打开20-Jul-2180
发送20-Jul-2180提示
9发送29-Apr-2180初始
9发送07-May-2180提示

在Oracle 12中,您可以使用MATCH_RECOGNIZE进行逐行处理:

SELECT cust_id,
event,
event_date,
camp_id,
CASE email_ind
WHEN 'CONVERTED' THEN 'CONVERTED'
WHEN 'INITIAL'   THEN 'INITIAL'
WHEN 'REMINDER'  THEN 'REMINDER'
END AS email_ind,
CASE
WHEN email_ind = 'CONVERTED'
AND  has_reminder = 1
THEN 'REMINDER'
WHEN email_ind = 'CONVERTED'
THEN 'INITIAL'
END AS conversion_type
FROM   (SELECT t.*, ROWNUM AS rn FROM table_name t)
MATCH_RECOGNIZE (
PARTITION BY cust_id
ORDER     BY rn
MEASURES
CLASSIFIER() AS email_ind,
COUNT(reminder.cust_id)  AS has_reminder
ALL ROWS PER MATCH
PATTERN ( ("INITIAL" not_sent*)? (reminder not_sent*)? not_reminder converted | other )
DEFINE
"INITIAL"    AS event = 'SENT',
reminder     AS event = 'SENT',
not_reminder AS event = 'SENT',
not_sent     AS event <> 'SENT',
converted    AS event = 'CONVERTED'
)

db<此处小提琴>

相关内容

最新更新