CREATE (year2014:Year{value:2014}),
(year2014)-[:hasMonth]->(january:January:Month{name:"January",value:1}),
(year2014)-[:hasMonth]->(february:February:Month{name:"February",value:2}),
(year2014)-[:hasMonth]->(march:March:Month{name:"March",value:3}),
(year2014)-[:hasMonth]->(april:April:Month{name:"April",value:4}),
(year2014)-[:hasMonth]->(may:May:Month{name:"May",value:5}),
(year2014)-[:hasMonth]->(june:June:Month{name:"June",value:6}),
(year2014)-[:hasMonth]->(july:July:Month{name:"July",value:7}),
(year2014)-[:hasMonth]->(august:August:Month{name:"August",value:8}),
(year2014)-[:hasMonth]->(september:September:Month{name:"September",value:9}),
(year2014)-[:hasMonth]->(october:Oktober:Month{name:"October",value:10}),
(year2014)-[:hasMonth]->(november:November:Month{name:"November",value:11}),
(year2014)-[:hasMonth]->(december:December:Month{name:"December",value:12}),
(march)-[:hasDay]->(d1:Day{value:1}),
(march)-[:hasDay]->(d2:Day{value:2}),
(march)-[:hasDay]->(d3:Day{value:3}),
(march)-[:hasDay]->(d4:Day{value:4}),
(march)-[:hasDay]->(d5:Day{value:5}),
(march)-[:hasDay]->(d6:Day{value:6}),
(march)-[:hasDay]->(d7:Day{value:7}),
(march)-[:hasDay]->(d8:Day{value:8}),
(march)-[:hasDay]->(d9:Day{value:9}),
(march)-[:hasDay]->(d10:Day{value:10}),
(march)-[:hasDay]->(d11:Day{value:11}),
(march)-[:hasDay]->(d12:Day{value:12}),
(march)-[:hasDay]->(d13:Day{value:13}),
(march)-[:hasDay]->(d14:Day{value:14}),
(march)-[:hasDay]->(d15:Day{value:15}),
(march)-[:hasDay]->(d16:Day{value:16}),
(march)-[:hasDay]->(d17:Day{value:17}),
(march)-[:hasDay]->(d18:Day{value:18}),
(march)-[:hasDay]->(d19:Day{value:19}),
(march)-[:hasDay]->(d20:Day{value:20}),
(march)-[:hasDay]->(d21:Day{value:21}),
(march)-[:hasDay]->(d22:Day{value:22}),
(march)-[:hasDay]->(d23:Day{value:23}),
(march)-[:hasDay]->(d24:Day{value:24}),
(march)-[:hasDay]->(d25:Day{value:25}),
(march)-[:hasDay]->(d26:Day{value:26}),
(march)-[:hasDay]->(d27:Day{value:27}),
(march)-[:hasDay]->(d28:Day{value:28}),
(march)-[:hasDay]->(d29:Day{value:29}),
(march)-[:hasDay]->(d30:Day{value:30}),
(march)-[:hasDay]->(d31:Day{value:31}),
(d1)-[:isA]->(saturday:Saturday:DayName{name:"Saturday",value:6}),
(d2)-[:isA]->(sunday:Sunday:DayName{name:"Sunday",value:7}),
(d3)-[:isA]->(monday:Monday:DayName{name:"Monday",value:1}),
(d4)-[:isA]->(tuesday:Tuesday:DayName{name:"Tuesday",value:2}),
(d5)-[:isA]->(wednesday:Wednesday:DayName{name:"Wednesday",value:3}),
(d6)-[:isA]->(thursday:Thursday:DayName{name:"Thursday",value:4}),
(d7)-[:isA]->(friday:Friday:DayName{name:"Friday",value:5}),
(d8)-[:isA]->(saturday),
(d9)-[:isA]->(sunday),
(d10)-[:isA]->(monday),
(d11)-[:isA]->(tuesday),
(d12)-[:isA]->(wednesday),
(d13)-[:isA]->(thursday),
(d14)-[:isA]->(friday),
(d15)-[:isA]->(saturday),
(d16)-[:isA]->(sunday),
(d17)-[:isA]->(monday),
(d18)-[:isA]->(tuesday),
(d19)-[:isA]->(wednesday),
(d20)-[:isA]->(thursday),
(d21)-[:isA]->(friday),
(d22)-[:isA]->(saturday),
(d23)-[:isA]->(sunday),
(d24)-[:isA]->(monday),
(d25)-[:isA]->(tuesday),
(d26)-[:isA]->(wednesday),
(d27)-[:isA]->(thursday),
(d28)-[:isA]->(friday),
(d29)-[:isA]->(saturday),
(d30)-[:isA]->(sunday),
(d31)-[:isA]->(monday)
CREATE (locationA:Location{name:"Location A"}),
(locationA)-[:hasOpeningHours]->(ohA1:OpeningHours),
(ohA1)-[:hasInterval]->(:Interval{from:800,to:1200}),
(ohA1)-[:hasInterval]->(:Interval{from:1400,to:1900}),
(locationA)-[:hasOpeningHours]->(ohA2:OpeningHours),
(ohA2)-[:hasInterval]->(:Interval{from:800,to:1200}),
(ohA2)-[:hasInterval]->(:Interval{from:1400,to:1630}),
(ohA1)-[:hasValidity]->(january),
(ohA1)-[:hasValidity]->(february),
(ohA1)-[:hasValidity]->(march),
(ohA1)-[:hasValidity]->(april),
(ohA1)-[:hasValidity]->(may),
(ohA1)-[:hasValidity]->(june),
(ohA1)-[:hasValidity]->(august),
(ohA1)-[:hasValidity]->(september),
(ohA1)-[:hasValidity]->(october),
(ohA1)-[:hasValidity]->(november),
(ohA1)-[:hasValidity]->(december),
(ohA2)-[:hasValidity]->(january),
(ohA2)-[:hasValidity]->(february),
(ohA2)-[:hasValidity]->(march),
(ohA2)-[:hasValidity]->(april),
(ohA2)-[:hasValidity]->(may),
(ohA2)-[:hasValidity]->(june),
(ohA2)-[:hasValidity]->(august),
(ohA2)-[:hasValidity]->(september),
(ohA2)-[:hasValidity]->(october),
(ohA2)-[:hasValidity]->(november),
(ohA2)-[:hasValidity]->(december),
(ohA1)-[:hasValidity]->(tuesday),
(ohA1)-[:hasValidity]->(wednesday),
(ohA1)-[:hasValidity]->(thursday),
(ohA2)-[:hasValidity]->(friday)
CREATE (locationB:Location{name:"Location B"}),
(locationB)-[:hasOpeningHours]->(ohB1:OpeningHours),
(ohB1)-[:hasInterval]->(:Interval{from:1000,to:1400}),
(ohB1)-[:hasInterval]->(:Interval{from:1500,to:1900}),
(locationB)-[:hasOpeningHours]->(ohB2:OpeningHours),
(ohB2)-[:hasInterval]->(:Interval{from:1000,to:1400}),
(ohB2)-[:hasInterval]->(:Interval{from:1600,to:2100}),
(locationB)-[:hasOpeningHours]->(ohB3:OpeningHours),
(ohB3)-[:hasInterval]->(:Interval{from:1000,to:1300}),
(ohB1)-[:hasValidity]->(january),
(ohB1)-[:hasValidity]->(february),
(ohB1)-[:hasValidity]->(march),
(ohB1)-[:hasValidity]->(april),
(ohB1)-[:hasValidity]->(may),
(ohB1)-[:hasValidity]->(june),
(ohB1)-[:hasValidity]->(july),
(ohB1)-[:hasValidity]->(august),
(ohB1)-[:hasValidity]->(september),
(ohB1)-[:hasValidity]->(october),
(ohB1)-[:hasValidity]->(november),
(ohB1)-[:hasValidity]->(december),
(ohB2)-[:hasValidity]->(january),
(ohB2)-[:hasValidity]->(february),
(ohB2)-[:hasValidity]->(march),
(ohB2)-[:hasValidity]->(april),
(ohB2)-[:hasValidity]->(may),
(ohB2)-[:hasValidity]->(june),
(ohB2)-[:hasValidity]->(july),
(ohB2)-[:hasValidity]->(august),
(ohB2)-[:hasValidity]->(september),
(ohB2)-[:hasValidity]->(october),
(ohB2)-[:hasValidity]->(november),
(ohB2)-[:hasValidity]->(december),
(ohB3)-[:hasValidity]->(january),
(ohB3)-[:hasValidity]->(february),
(ohB3)-[:hasValidity]->(march),
(ohB3)-[:hasValidity]->(april),
(ohB3)-[:hasValidity]->(may),
(ohB3)-[:hasValidity]->(june),
(ohB3)-[:hasValidity]->(august),
(ohB3)-[:hasValidity]->(september),
(ohB3)-[:hasValidity]->(october),
(ohB3)-[:hasValidity]->(november),
(ohB3)-[:hasValidity]->(december),
(ohB1)-[:hasValidity]->(monday),
(ohB1)-[:hasValidity]->(tuesday),
(ohB2)-[:hasValidity]->(thursday),
(ohB1)-[:hasValidity]->(friday),
(ohB3)-[:hasValidity]->(saturday)
MATCH
(location:Location)-[:hasOpeningHours]->(openingHours:OpeningHours),
(openingHours)-[:hasInterval]->(interval:Interval),
(openingHours)-[:hasValidity]->(day:DayName),
(openingHours)-[:hasValidity]->(month:Month)
WHERE
interval.from <= 1623 AND
interval.to > 1623
RETURN DISTINCT location.name, day.name, interval.from + " - " + interval.to as OpeningHours
MATCH
(location:Location)-[:hasOpeningHours]->(openingHours:OpeningHours),
(openingHours)-[:hasInterval]->(interval:Interval),
(openingHours)-[:hasValidity]->(day:DayName),
(openingHours)-[:hasValidity]->(month:Month)
WHERE
interval.to >= 2000
RETURN DISTINCT location.name, collect(DISTINCT day.name) as days, collect(month.name) as months
'''
Returns all locations which are opened at saturdays. Also returns all months where this is valid. E.g. "Location B" has open on saturdays, every month except in july (holidays yay \o/)
MATCH
(location:Location)-[:hasOpeningHours]->(openingHours:OpeningHours),
(openingHours)-[:hasInterval]->(interval:Interval),
(openingHours)-[:hasValidity]->(day:Saturday),
(openingHours)-[:hasValidity]->(month:Month)
RETURN DISTINCT location.name, collect(month.name) as months, interval.from + " - " + interval.to as OpeningHours