Orientdb SubQuery Макс. Дата - PullRequest
       8

Orientdb SubQuery Макс. Дата

0 голосов
/ 31 августа 2018

Я искал это и мне не повезло. У меня есть настройка базы данных графа в OrientDb (3.0.2), и у меня возникают некоторые проблемы с подзапросами. Я мог бы легко написать это в классической реляционной базе данных. Я играл с LET и $ parent / $ children, но эти концепции все еще немного сбивают с толку.

Три вершины: Сущность <- Инспекция -> Нарушения

Я бы хотел, чтобы последняя Инспекция (дата) для каждой организации и была известна, сколько нарушений было связано с этой Инспекцией.

Я знаю, как вытащить количество нарушений для каждой проверки (размер () ребер). Я также знаю, как установить максимальную дату проверки для каждого объекта, но объединение этих двух было проблемой. Какие-нибудь мысли? Спасибо!

Обновление: Я думаю, что приближаюсь, но все еще не уверен, как сделать "внутреннее" соединение. Не уверен, что я полностью понимаю, как работают переменные $ parent / $ current. Этот запрос не работает

SELECT
    entityId
    ,$a.num_violations
    ,max(Date) as mDate
FROM (
    SELECT
        @rid AS entityId
        ,in('COMPLETED_AT').Date as Date
    FROM Entity
    unwind Date
)
let $a = (
  SELECT
    Date
    ,out('FOUND_DURING').size() as num_violations
  FROM Inspection
  WHERE $parent.mDate = Date
  AND $parent.entityId in out('COMPLETED_AT').@rid
)
GROUP BY entityId
    ,$a.num_violations

1 Ответ

0 голосов
/ 31 августа 2018

попробуйте это:

select expand($c)
let $a = (select date, out("link")[@class="Violations"].size() as num_violations from Inspection),
$b = (select name, max(date) as max_date from (select name, in("link").date as date from Entity unwind date) group by name),
$c = unionAll($a, $b)

вот что вы получаете:

+----+-------------------+--------------+----------+-------------------+
|#   |date               |num_violations|name      |max_date           |
+----+-------------------+--------------+----------+-------------------+
|0   |2018-08-31 00:00:00|1             |          |                   |
|1   |2018-08-30 00:00:00|2             |          |                   |
|2   |2018-08-29 00:00:00|1             |          |                   |
|3   |                   |              |entity_001|2018-08-31 00:00:00|
|4   |                   |              |entity_002|2018-08-29 00:00:00|
+----+-------------------+--------------+----------+-------------------+


UPDATE

select expand($c)
let $a = (select name as entity_name, max(date) as max_date from (select name, in("link").date as date from Entity unwind date) group by name),
$b = (select out("link")[@class="Violations"].size() as num_violations from Inspection),
$c = unionAll($a, $b)


+----+-----------+-------------------+--------------+
|#   |entity_name|max_date           |num_violations|
+----+-----------+-------------------+--------------+
|0   |entity_001 |2018-08-31 00:00:00|              |
|1   |entity_002 |2018-08-29 00:00:00|              |
|2   |           |                   |1             |
|3   |           |                   |2             |
|4   |           |                   |1             |
+----+-----------+-------------------+--------------+


Надеюсь, это поможет

Привет

...