Запрос Orient DB с помощью «соединений»

Недавно я начал смотреть на OrientDB, исходя из реляционного фона (Oracle RDBMS), и я изо всех сил пытаюсь запросить некоторые данные, которые я загрузил в OrientDB.

У меня есть 2 класса:

CREATE CLASS prices
CREATE PROPERTY prices.price_created_datetime DATETIME
CREATE PROPERTY prices.price_value DOUBLE

CREATE CLASS stocks
CREATE PROPERTY stocks.stock_symbol STRING
CREATE PROPERTY stocks.stock_prices LINKLIST prices

Я загружаю некоторые данные, сначала запуская UPSERT для класса «акции», а затем несколько раз в день добавляя цены:

UPDATE stocks ADD stock_prices = {json string of class:prices}

Что я хотел бы сделать, так это получить все значения stocks.stock_symbol и агрегировать (используя среднее значение) price.price_value за последние 24 часа (поэтому фильтрация по price.price_created_datetime).

Я использую веб-студию, и я играл с несколькими различными методами, но я изо всех сил пытаюсь понять концепцию, когда большинство моих запросов ничего не возвращают. У меня есть OrientDB 2.1.9, встроенный в приложение Java.

Любая помощь будет оценена по достоинству.


person JAC2703    schedule 26.01.2016    source источник
comment
Привет, я пытаюсь написать запрос, чтобы сделать то, что вам нужно   -  person Ivan Mainetti    schedule 26.01.2016
comment
Привет @IvanMainetti, дай мне знать, как у тебя дела :)   -  person JAC2703    schedule 27.01.2016
comment
Привет, я пытаюсь выполнить запрос @LucaS, и, похоже, он у меня работает! В конце концов, вы можете загрузить небольшой экспорт базы данных? Спасибо!   -  person Ivan Mainetti    schedule 27.01.2016


Ответы (1)


Я попробовал ваш случай с этой структурой (как и у вас):

Класс: stocks

Недвижимость: stocks.stock_symbol STRING

Недвижимость: stocks.stock_prices LINKLIST prices

Класс: prices

Недвижимость: prices.price_created_datetime DATETIME

Недвижимость: prices.price_value DOUBLE

И вот данные:

введите здесь описание изображения

введите здесь описание изображения

Чтобы найти все биржевые символы со средними относительными ценами за последние 24 часа, я использовал этот запрос:

select stock_symbol, $prices.averageLast24 as averagePricesLast24 from stocks 
let $prices = (select avg(price_value) as averageLast24 from (select price_value, price_created_datetime.asDatetime() as dataLast24 from prices) where eval('(sysdate() - dataLast24) / 3600000') < 24 and dataLast24 in $parent.current.stock_prices.price_created_datetime) 
unwind averagePricesLast24

и это вывод:

----+------+------------+-------------------
#   |@CLASS|stock_symbol|averagePricesLast24
----+------+------------+-------------------
0   |null  |bbb         |492345.5
1   |null  |ccc         |320167.0
----+------+------------+-------------------

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

person LucaS    schedule 27.01.2016
comment
Итак... похоже, это не работает, по крайней мере, не с моим набором данных. Он возвращает результат, но агрегат не работает. - person JAC2703; 27.01.2016
comment
Привет, ты выполнял тот же запрос? Не могли бы вы привести пример вашего вывода? или скриншот ваших классов и данных? - person LucaS; 27.01.2016
comment
Привет, у тебя была возможность попробовать запрос? - person LucaS; 29.01.2016
comment
Привет @LucaS - большое спасибо за ответ. В конце концов мне удалось заставить мой запрос работать - я не использовал LET, но я думаю, что технически у нас есть похожие запросы. - person JAC2703; 30.01.2016
comment
Привет @ JAC2703, каково твое решение? - person LucaS; 30.01.2016