Как использовать сложные вложенные запросы в Cypher - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть запрос в Cypher, который находит последний последний раз определенного устройства.Я хочу сопоставить все устройства в моей БД, где их последний атрибут времени является последним из их устройств, а затем вернуть их идентификатор.к сожалению, я не смог создать правильный подзапрос.

Я пытался использовать примеры с и {}, но не смог найти ничего, что сработало.

Основная масса (которая работает):

MATCH (a:device)
MATCH (b:device)
WHERE certain filters
RETURN
CASE 
WHEN a.last_seen > MAX(b.last_seen) THEN a.last_seen 
WHEN a.last_seen < MAX(b.last_seen) THEN MAX(b.last_seen)
ELSE a.last_seen END AS lastest

А потомЯ хочу сделать:

MATCH (d:device)
WHERE d.last_seen = lastest
RETURN d.device_id

Что бы я ни пытался до сих пор, я получал только синтаксические ошибки.Как мне вложить массовый запрос?

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете получить последнюю версию last_seen с помощью функции MAX.

Затем вы можете использовать ее для получения всех устройств с latest last_seen .

Вот запрос, чтобы получить максимум last_seen, а затем получить все устройства, соответствующие этому last_seen.

MATCH (a:device)
WHERE certain filters
WITH MAX(a.last_seen) AS latest_last_seen
MATCH (d:device)
WHERE d.last_seen = latest_last_seen
RETURN d.device_id

( Заменить определенные фильтры на фильтры, которые вы хотитеЯ думаю, что вы забыли добавить определенные фильтры во второй запрос ).

РЕДАКТИРОВАТЬ: В соответствии с предложением @InverseFalcon, добавить индекс для свойства last_seen

...