【发布时间】:2020-12-18 07:33:37
【问题描述】:
我有三个表,其详细结构和数据如下:
-
表 TBL_REFERRAL
ID CREATED_DATE USER_NAME REFERRAL_CODE --------------------------------------------------------- 1 28-08-2020 12:15:40 DINA EM0001 2 28-08-2020 12:19:42 DINA EM0002 3 28-08-2020 12:19:22 LISA EM0003 4 28-08-2020 20:00:09 LISA EM0004 5 29-08-2020 12:00:05 RYAN EM0004 -
表 TBL_USER
ID USER_NAME UNIQUE_CODE ---------------------------------- 1 DINA UNI0001 3 LISA UNI0002 5 RYAN UNI0003 -
表 TBL_CHECKOUT
TRANS_ID UNIQUE_CODE CREATED_DATE ITEM TOTAL ------------------------------------------------------------------------ 1112 UNI0001 28-08-2020 12:20:40 Milk 5000 1113 UNI0002 28-08-2020 12:22:22 Shampoo 12000 1114 UNI0002 28-08-2020 20:11:09 Biscuit 5000 1115 UNI0003 29-08-2020 12:02:05 Soap 2000
由于某些情况,在此过程中我无法连接结帐表和推荐人。但是我想要一个将结帐与推荐连接的视图表,但我使用基于推荐和结帐之间创建的日期时间的逻辑来映射它。我有可能有这样的视图表吗? :
REFERRAL_CODE TRANS_ID USER_NAME UNIQUE_CODE REFERRAL_DATE CHECKOUT_DATE
------------------------------------------------------------------------------------------
EM0002 1112 DINA UNI0001 28-08-2020 12:19:42 28-08-2020 12:20:40
EM0003 1113 LISA UNI0002 28-08-2020 12:19:22 28-08-2020 12:22:22
EM0004 1114 LISA UNI0002 28-08-2020 20:00:09 28-08-2020 20:11:09
EM0004 1115 RYAN UNI0003 29-08-2020 12:00:05 29-08-2020 12:02:05
更新 -> 我一直在尝试这样的查询:
SELECT
a.REFERRAL_CODE, a.USER_NAME, b.UNIQUE_CODE, c.TRANS_ID,
a.CREATED_DATE AS "REFERRAL_DATE", c.CREATED_DATE AS "CHECKOUT_DATE"
FROM
TBL_CHECKOUT c
LEFT JOIN TBL_USER b
ON c.UNIQUE_CODE = b.UNIQUE_CODE
LEFT JOIN TBL_REFERRAL a
ON a.USER_NAME = b.USER_NAME
WHERE
c.CREATED_DATE > a.CREATED_DATE;
结果来了:
REFERRAL_CODE TRANS_ID USER_NAME UNIQUE_CODE REFERRAL_DATE CHECKOUT_DATE
------------------------------------------------------------------------------------------
EM0001 1112 DINA UNI0001 28-08-2020 12:15:40 28-08-2020 12:20:40
EM0002 1112 DINA UNI0001 28-08-2020 12:19:42 28-08-2020 12:20:40
EM0003 1113 LISA UNI0002 28-08-2020 12:19:22 28-08-2020 12:22:22
EM0004 1114 LISA UNI0002 28-08-2020 20:00:09 28-08-2020 20:11:09
EM0004 1115 RYAN UNI0003 29-08-2020 12:00:05 29-08-2020 12:02:05
因此,根据我的结果和期望,仍然缺少 1 个过滤。 在这种情况下c.CREATED_DATE > a.CREATED_DATE,如果a.CREATED_DATE比c.CREATED_DATE更小,那么c.CREATED_DATE大于1。数据显示2行,应该只有1行,获取最新的a.CREATED_DATE。 如果我在逻辑中使用 ROW_NUMBER,它将干扰行 EM0003 & 1113 和 EM0004 & 1114。
根据我目前的结果,我想根据最新的 REFERRAL_DATE 对 transaction_id 进行分组,这可能吗?
非常感谢你的帮助,我真的很感激
【问题讨论】:
-
你为什么选择不使用明确的、现代的、标准的、可读的
JOIN语法? -
您想要来自推荐表的最新记录吗?或者我没听懂。
-
@Sujitmohanty30 有 2 个条件 1。如果 1 个用户名中有 2 个推荐代码然后连接到结帐表,则最新记录表格推荐。 2.需要查看created_date列的checkout表,1个用户名有多少checkout数据,2ndrefer code之前有没有checkout数据。如是。首先将第一个推荐代码连接到第一次结帐,然后将第二个推荐代码连接到下一个结帐。
-
@Diana:感谢您的澄清,但按照这个逻辑,
EM0003如何连接到1113? -
@Sujitmohanty30 好的,所以名为 Lisa 的用户唯一代码是 UNI0002 已在 28-08-2020 12:19:22 获得推荐代码 EM0003(在 TBL_REFERRAL 上)。然后她在 28-08-2020 12:22:22 进行了第一笔交易(onTBL_CHECKOUT 与 unique_code 连接)。然后她在 28-08-2020 20:00:09 获得了第二个推荐码,这意味着第二个推荐码是在她的第一次交易之后出现的。所以,她的第一笔交易应该是与第一个推荐人联系,即 EM0003 到 1113。这种情况是我之前提到的条件号 2。
标签: sql oracle oracle11g oracle12c