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 столбца представляют: вопросы, разница во времени, теги

Пример данных:

Все данные будут использованы, похоже на это изображение, сообщение с parentId является ответом, его родитель является его вопросом

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
Другие вопросы по тегам