Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
michaeldburt
Partner - Contributor III
Partner - Contributor III

Joining date field to table with startdate and enddate

Hello-

I am trying to join two tables.  One table has DateField, and the other table has StartDate and EndDate.

I'm wondering what the most efficient way to join these tables would be.

Thanks!

5 Replies
pokassov
Specialist
Specialist

Hello!

You have to use IntervalMatch. You can read about it in help.

There are simply example, like this:

OrderLog:

LOAD * INLINE [

Start, End, Order

01:00, 03:35, A

02:30, 07:58, B

03:04, 10:27, C

07:23, 11:43, D

];

EventLog:

LOAD * INLINE [

Time, Event, Comment

00:00, 0, Start of shift 1

01:18, 1, Line stop

02:23, 2, Line restart 50%

04:15, 3, Line speed 100%

08:00, 4, Start of shift 2

11:43, 5, End of production

];

IntervalMatch (Time) LOAD Start, End Resident OrderLog;

Sergey

Anonymous
Not applicable

It depends on what you need.

Say, you select April 2015 in the first table.  Do you want to get the records that start in April or that end in April?  It is unlikely you want both at a time.  But if you do - search for "Canonical Date" blog post from Henric C.

giakoum
Partner - Master II
Partner - Master II

what is the requirement?

To me it looks like a case for interval match.

IntervalMatch

The IntervalMatch prefix is used to create a table matching discrete numeric values to one or more numeric intervals.

It must be placed before a Load or Select (SQL)statement that loads the intervals. The field containing the discrete data points (Time in the example below) must already have been loaded into QlikView before the statement with the IntervalMatch prefix. The prefix does not by itself read this field from the database table. The prefix transforms the loaded table of intervals to a table that contains an additional column: the discrete numeric data points. It also expands the number of records so that the new table has one record per possible combination of discrete data point and interval.

The intervals may be overlapping and the discrete values will be linked to all matching intervals.

The general syntax is:

intervalmatch (matchfield) (loadstatement | selectstatement )

matchfield is the field containing the discrete numeric values to be linked to intervals.

loadstatement or selectstatement must result in a two-column table, where the first field contains the lower limit of each interval and the second field contains the upper limit of each interval. The intervals are always closed, i.e. the end points are included in the interval. Non-numeric limits render the interval to be disregarded (undefined).

There is also an extended syntax of IntervalMatch including one or several additional key fields. See IntervalMatch (Extended Syntax).

Example:

In the two tables below, the first one defines the start and end times for the production of different orders. The second one lists a number of discrete events. By means of the IntervalMatch prefix it is possible to logically connect the two tables in order to find out e.g. which orders were affected by disturbances and which orders were processed by which shifts.

OrderLog

Start

End

Order

01:00

03:35

A

02:30

07:58

B

03:04

10:27

C

07:23

11:43

D

EventLog

Time

Event

Comment

00:00

0

Start of shift 1

01:18

1

Line stop

02:23

2

Line restart 50%

04:15

3

Line speed 100%

08:00

4

Start of shift 2

11:43

5

End of production

First load the two tables as usual, then link the field Time to the time intervals defined by the fields Start and End:

SQL SELECT * FROM OrderLog;

SQL SELECT * FROM Eventlog;

IntervalMatch ( Time ) SQL SELECT Start, End FROM OrderLog;

The following table box can now be created in QlikView:

Tablebox

Time

Event

Comment

Order

Start

End

00:00

0 Start of shift 1 - - -
01:18 1 Line stop A 01:00 03:35
02:23 2 Line restart 50% A 01:00 03:35
04:15 3 Line speed 100% B 02:30 07:58
04:15 3 Line speed 100% C 03:04 10:27
08:00 4 Start of shift 2 C 03:04 10:27
08:00 4 Start of shift 2 D 07:23 11:43
11:43 5 End of production D 07:23 11:43
michaeldburt
Partner - Contributor III
Partner - Contributor III
Author

Here is more on the requirement...

TableA:

DataField,

DataField1,

DataField2,

Date;

TableB:

GL_Period,

GL_Period_Start_Date,

GL_Period_End_Date;

I am looking to join these tables such that the Date field in TableA, when selected will give me the correct GL_Period from TableB, and the corresponding Start and End dates for that GL_Period.

Not applicable

Hello,

Use intervalmatch as suggested above.

TableA:

DataField,

DataField1,

DataField2,

Date;

.......

TableB:

GL_Period,

GL_Period_Start_Date,

GL_Period_End_Date;

......

IntervalMatch:

IntervalMatch (Date)

Load distinct GL_Period_Start_Date, GL_Period_End_Date resident TableB;