cancel
Showing results forΒ
Did you mean:Β

## Calculate overlap time in two type node

Node Clone

Hi, I am trying to add an overlap relationship to my nodes.
Each node has its own waferID, fromtime, totime,WORK.
And in each WORK, there are small nodes to record the detail time of the job.

I want to search for work nodes that overlap each other.
Then find which detail node has overlap relation.

EX:
WORK node A1 is overlap WORK node B1.
And I want to find those detail nodes in A1 that have overlap with B1.

This my data sample.

Work Node :

WAFERID fromtime totime WORK
A1 10:00 10:05 process A
B1 10:02 10:06 process B

Detail Node :

WAFERID fromtime totime WORK STEP
A1 10:00 10:01 process A 1
A1 10:01 10:03 process A 2
A1 10:03 10:05 process A 3
B1 10:02 10:04 process B 1
B1 10:04 10:05 process B 2
B1 10:05 10:05 process B 3

I am thinking about that do I need to add an overlap relationship from WORK node to detail node?
Or maybe have some queries that I can find it without adding overlap relation to detail node?
Like using diff time?

Thanks!

1 ACCEPTED SOLUTION
Graph Steward

Hi,
I used below dataset
name,from,to
A,10:00,10:05
B,10:00,10:08
C,10:05,10:08
D,11:00,11:05

Ingestion Query
load csv with headers from 'file:///Overlap.csv' as line Create (n:Wafer{name:line.name,from:localtime({hour:toInteger(split(line.from,':')[0]), minute:toInteger(split(line.from,':')[1])}),to:localtime({hour:toInteger(split(line.to,':')[0]), minute:toInteger(split(line.to,':')[1])})}) return n

Match Query
match(n:Wafer) match(m:Wafer) Where n.to>=m.from>=n.from and n.name<>m.name return distinct n.name,m.name

Output
|n.name|m.name|
|n.name|m.name|
|"A"|"B"|
|"A"|"C"|
|"B"|"A"|
|"B"|"C"|

Only problem I see that I am getting duplicate records too for an example AB and BA

2 REPLIES 2
Graph Steward

Hi,
I used below dataset
name,from,to
A,10:00,10:05
B,10:00,10:08
C,10:05,10:08
D,11:00,11:05

Ingestion Query
load csv with headers from 'file:///Overlap.csv' as line Create (n:Wafer{name:line.name,from:localtime({hour:toInteger(split(line.from,':')[0]), minute:toInteger(split(line.from,':')[1])}),to:localtime({hour:toInteger(split(line.to,':')[0]), minute:toInteger(split(line.to,':')[1])})}) return n

Match Query
match(n:Wafer) match(m:Wafer) Where n.to>=m.from>=n.from and n.name<>m.name return distinct n.name,m.name

Output
|n.name|m.name|
|n.name|m.name|
|"A"|"B"|
|"A"|"C"|
|"B"|"A"|
|"B"|"C"|

Only problem I see that I am getting duplicate records too for an example AB and BA

Node Clone

It work!

What if I want to give relationships based on the same WAFERID and FROMTIME order of their occurrence?

E.g..
node:

WAFERID fromtime totime WORK STEP
A1 10:00 10:01 process A 1
A1 10:01 10:03 process A 2
A1 10:03 10:05 process A 3

I want to set the relation like.
Relation:

WAFERID fromtime totime WORK STEP next_fromtime next_step
A1 10:00 10:01 process A 1 10:01 2
A1 10:01 10:03 process A 2 10:03 3