Skip to main content
Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
cancel
Showing results for 
Search instead for 
Did you mean: 
talita_verdes
Partner - Contributor III
Partner - Contributor III

Interval between dates

Good afternoon!


I have a problem and I do not know how to solve


I need to show how many customers returned to the store in less than 24/48/72 hours.


I have the following table:


ID

DATE

CUSTOMERS

6223875

03/02/2018 19:18:37

1050943

6223876

31/01/2018 19:18:37

1050943

6223874

24/01/2018 19:18:37

1050943

6220698

24/01/2018 07:46:19

1050943

6220443

23/01/2018 03:41:50

1050943

5813877

21/01/2018 02:58:47

1050943


If I select the date 03/02/2018 I need that my client appears sorted with the return in 72 hours


If I select the date of 01/24/2018 I need my client to appear ranked with the return in 24 hours between 23/01/2018 and 01/24/2018


If I select the date 23/01/2018 I need my client to appear ranked with the return in 48 hours


If I select the date of 01/21/2018 my client will not be considered


How can I do this?


I've already tried using Peek, Below, above, interval, and i tried to create a table on script.


Thanks

1 Solution

Accepted Solutions
Nicole-Smith

Load script like this should do the trick:

Temp:

LOAD ID,

DATE#(DATE, 'DD/MM/YYY hh:mm:ss') AS DATE,

CUSTOMERS

INLINE [

ID, DATE, CUSTOMERS

6223875, 03/02/2018 19:18:37, 1050943

6223876, 31/01/2018 19:18:37, 1050943

6223874, 24/01/2018 19:18:37, 1050943

6220698, 24/01/2018 07:46:19, 1050943

6220443, 23/01/2018 03:41:50, 1050943

5813877, 21/01/2018 02:58:47, 1050943

];


Final:

LOAD ID,

DATE,

CUSTOMERS,

IF(DIFF <= 1, 24, IF(DIFF <= 2, 48, IF(DIFF <= 3, 72))) AS RETURN_WITHIN;

LOAD ID,

DATE,

CUSTOMERS,

IF(CUSTOMERS = PREVIOUS(CUSTOMERS), DATE#(DATE, 'DD/MM/YYY hh:mm:ss') - DATE#(PREVIOUS(DATE), 'DD/MM/YYY hh:mm:ss')) AS DIFF

RESIDENT Temp

ORDER BY CUSTOMERS, DATE;


DROP TABLE Temp;


It will return a table that looks like this:

ID DATE CUSTOMERS RETURN_WITHIN
58138771/21/2018 2:58:47 AM1050943
62204431/23/2018 3:41:50 AM105094372
62206981/24/2018 7:46:19 AM105094348
62238741/24/2018 7:18:37 PM105094324
62238761/31/2018 7:18:37 PM1050943
62238752/3/2018 7:18:37 PM105094372


View solution in original post

1 Reply
Nicole-Smith

Load script like this should do the trick:

Temp:

LOAD ID,

DATE#(DATE, 'DD/MM/YYY hh:mm:ss') AS DATE,

CUSTOMERS

INLINE [

ID, DATE, CUSTOMERS

6223875, 03/02/2018 19:18:37, 1050943

6223876, 31/01/2018 19:18:37, 1050943

6223874, 24/01/2018 19:18:37, 1050943

6220698, 24/01/2018 07:46:19, 1050943

6220443, 23/01/2018 03:41:50, 1050943

5813877, 21/01/2018 02:58:47, 1050943

];


Final:

LOAD ID,

DATE,

CUSTOMERS,

IF(DIFF <= 1, 24, IF(DIFF <= 2, 48, IF(DIFF <= 3, 72))) AS RETURN_WITHIN;

LOAD ID,

DATE,

CUSTOMERS,

IF(CUSTOMERS = PREVIOUS(CUSTOMERS), DATE#(DATE, 'DD/MM/YYY hh:mm:ss') - DATE#(PREVIOUS(DATE), 'DD/MM/YYY hh:mm:ss')) AS DIFF

RESIDENT Temp

ORDER BY CUSTOMERS, DATE;


DROP TABLE Temp;


It will return a table that looks like this:

ID DATE CUSTOMERS RETURN_WITHIN
58138771/21/2018 2:58:47 AM1050943
62204431/23/2018 3:41:50 AM105094372
62206981/24/2018 7:46:19 AM105094348
62238741/24/2018 7:18:37 PM105094324
62238761/31/2018 7:18:37 PM1050943
62238752/3/2018 7:18:37 PM105094372