简体   繁体   中英

SELECT Data with logic created date not greater than

I have three tables with detail structure and data like this :

  1. Table 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
  2. Table TBL_USER

     ID USER_NAME UNIQUE_CODE ---------------------------------- 1 DINA UNI0001 3 LISA UNI0002 5 RYAN UNI0003
  3. Table 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

Because of some conditions, in the process I can't connect between checkout table and referral. But I want to have a view table that connecting the checkout with referral but I am map that with logic based on created date time between referral and check out. Is it possible to me have the view table like this ? :

  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

Updated -> I have been try the query like this :

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;

The result come is :

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

So, based on my result and expectation there is still missing 1 filtering. In this condition c.CREATED_DATE > a.CREATED_DATE, if a.CREATED_DATE that smaller then c.CREATED_DATE is more than 1. the data show 2 row, it should be just one, get latest a.CREATED_DATE. If i using ROW_NUMBER in logic it will be disturb row EM0003 & 1113 and EM0004 & 1114.

based on my current result, i want to grouping the transaction_id get based on latest REFERRAL_DATE, is it possible ?

Thank you so much for help I really appreciate it

You can use LEFT JOIN among those three tables, and ROW_NUMBER() analytic function is need to filter out the records among latest CHECKOUT_DATE values :

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM