Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
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