The result set looks like this:
(user {uid: 2})-[:LOVES {timestamp: "2013-02-01"}]-(something {sid:
1, additionalSortCriteria: 1})
(user {uid: 6})-[:LOVES {timestamp: "2013-02-04"}]-(something {sid:
6, additionalSortCriteria: 4})
(user {uid: 8})-[:LOVES {timestamp: "2013-01-05"}]-(something {sid:
10, additionalSortCriteria: 10})
...
Every Something is returned only once (distinct), sorted by
the additionalSortCriteria, and for every matching combination the newest
relation is returned.
Having skimmed the articles I don't think time-based versioning applies to
my problem, but I will give them a proper read later.
Thank you,
Manuel
Am Donnerstag, 7. August 2014 04:48:51 UTC+2 schrieb Kenny. Bastani:
>
> I suggest taking a look at time-based versioning of graphs.
>
> http://www.neo4j.org/graphgist?608bf0701e3306a23e77
>
> Also, a thorough blog post on the subject by Ian Robinson, author of the
> Graph databases book:
> http://iansrobinson.com/2014/05/13/time-based-versioned-graphs/
>
> Can you provide an example of your results? In your example your timestamp
> is a string. They should be an integer representation of your datetime,
> something like unix timestamp milliseconds since epoch. You can also store
> the date in its long form as a string just for reference.
>
> Thanks,
>
> Kenny
>
> On Wednesday, August 6, 2014 9:36:43 AM UTC-7, Manuel Zamora-Morschhäuser
> wrote:
>>
>> Hello everyone,
>>
>> I'm currently designing a cypher query which uses DISTINCT in combination
>> with aggregations and sorting and I'm not quite sure if I'm doing this the
>> right way.
>>
>> My schema looks like this:
>>
>> (user {userId: ..})-[rel:LOVES|HATES|IGNORES|... {timestamp:
>> ..}]->(something {somethingId: .., additionalSortCriteria: ...})
>>
>> I need a distinct list of Somethings, with only the newest relation of
>> any type, sorted by the additionalSortCriteria of Something.
>>
>> I have for example:
>>
>> (user {uid: 1})-[:LOVES {timestamp: "2013-01-01"}]->(something {sid:
>> 1, additionalSortCriteria: 1})
>> (user {uid: 2})-[:LOVES {timestamp: "2013-02-01"}]->(something {sid:
>> 1, additionalSortCriteria: 1})
>> (user {uid: 1})-[:LOVES {timestamp: "2013-03-01"}]->(something {sid:
>> 2, additionalSortCriteria: 2})
>> ...
>>
>> I use this query:
>>
>> MATCH (user:User)-[rel:LOVES]->(something:Something)
>> WITH DISTINCT(something.sid) as sid, MAX(rel.timestamp) AS timesort,
>> MAX(something.additionalSortCriteria) AS somethingsort ORDER BY
>> somethingsort, timesort
>> MATCH (user:User)-[rel:LOVES]->(something:Something) WHERE
>> something.sid=sid AND rel.timestamp=timesort AND
>> something.additionalSortCriteria=somethingsort
>> RETURN user,rel,something;
>>
>> And get a list of user, relations, somethings with only distinct
>> somethings, sorted by the somethings.additionalSortCriteria criteria and
>> only the newest relation... it seems so at least.
>>
>> The individual combinations of something.sid and relation.timestamps are
>> mostly unique, especially in combination with the additionalSortCriteria.
>>
>> Did I get it right or have I overlooked something? Is there a better way
>> to do this?
>>
>>
>> Thank you!
>>
>> Manuel
>>
>>
>>
--
You received this message because you are subscribed to the Google Groups
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.