Neo4j, как вернуть верхний n из разных групп тегов?
У меня есть база данных, которая представляет "Сообщения", она содержит дату создания, теги, заголовки. некоторые сообщения являются ответами на другие сообщения, затем некоторые сообщения являются вопросами, а другие сообщения являются ответами. Задача состоит в том, чтобы найти вопросы, которые имеют самое короткое время ответа в каждой отдельной группе тегов. Как мне этого добиться?
Я уже могу найти все ответы на вопросы с разницей во времени между временем создания вопросов и временем создания первого ответа для каждого тега, но я не могу вернуть вопрос с наименьшим временем ответа для каждого тега (первые 1 в каждой группе тегов). Я могу только вернуть все вещи.
Кто-нибудь может мне помочь с этим вопросом?
Это мой запрос:
WITH ['geospatial', 'economics', 'usa', 'demographics'] AS topiclist
UNWIND topiclist AS topics
Match (p1:Posts)
UNWIND p1.Tags AS tags
WITH p1,trim(tags) AS tag
Where tag = topics
Match (p1)-[:PARENT_OF]->(p2:Posts)
WITH p1, p2.CreationDate - p1.CreationDate AS time,tag,p2
ORDER BY tag,time
Return p1.Title ,time,tag
Спасибо за ответ Майкла Голодера, который решил мою проблему!! Если у вас есть похожий вопрос, пожалуйста, проверьте его ответ.
выходной образец:
возвращенный результат, 3 столбца представляют: вопросы, разница во времени, теги
Пример данных:
1 ответ
Было бы хорошо, если бы вы делали обрезку, когда сохраняете данные.
WITH ['geospatial', 'economics', 'usa', 'demographics'] AS topiclist
UNWIND topiclist AS topics
Match (p1:Posts) where single(tag in p1.tags where trim(tag) = topic)
Match (p1)-[:PARENT_OF]->(p2:Posts)
WITH p1, p2.CreationDate - p1.CreationDate AS time,tag,p2
ORDER BY tag,time
with tag, head(collect({post:p1,time:time}) as first
Return first.post.Title as title,first.time as time,tag