如何解决SELECT逻辑创建日期不大于的数据
我有三个具有详细结构和数据的表,如下所示:
-
表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,如果小于c.CREATED_DATE的a.CREATED_DATE大于1.,则数据显示2行,它应该只是第一行,获取最新的a.CREATED_DATE。 如果我在逻辑上使用ROW_NUMBER,则会干扰EM0003和1113行以及EM0004和1114行。
根据我当前的结果,我想根据最新的REFERRAL_DATE对transaction_id进行分组,有可能吗?
非常感谢您的帮助,我真的很感激
解决方法
您可以在这三个表中使用LEFT JOIN
,并且需要ROW_NUMBER()
分析函数来过滤掉最新CHECKOUT_DATE
个值中的记录:
WITH t AS
(
SELECT r.REFERRAL_CODE,r.USER_NAME,u.UNIQUE_CODE,c.TRANS_ID,r.CREATED_DATE AS "REFERRAL_DATE",c.CREATED_DATE AS "CHECKOUT_DATE",ROW_NUMBER() OVER (PARTITION BY r.USER_NAME ORDER BY c.CREATED_DATE DESC) AS rn
FROM TBL_CHECKOUT c
LEFT JOIN TBL_USER u
ON u.UNIQUE_CODE = c.UNIQUE_CODE
LEFT JOIN TBL_REFERRAL r
ON r.USER_NAME = u.USER_NAME
WHERE r.CREATED_DATE < c.CREATED_DATE
)
SELECT REFERRAL_CODE,USER_NAME,UNIQUE_CODE,TRANS_ID,REFERRAL_DATE,CHECKOUT_DATE
FROM t
WHERE rn = 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。