使用'join'查询Orient DB

时间:2016-01-26 16:57:36

标签: orientdb orientdb-2.1

我最近开始关注来自关系背景(Oracle RDBMS)的OrientDB,而我正在努力查询我加载到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值并在过去24小时内汇总(使用平均值)price.price_value(因此过滤price.price_created_datetime)。

我正在使用基于网络的工作室,我玩了几种不同的方法,但是当我的大部分查询都没有返回任何内容时,我很难获得这个概念。我将OrientDB 2.1.9运行嵌入Java应用程序中。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我尝试了这种结构(就像你的那样):

课程:stocks

财产:stocks.stock_symbol STRING

财产:stocks.stock_prices LINKLIST prices

课程:prices

财产:prices.price_created_datetime DATETIME

财产:prices.price_value DOUBLE

这是数据:

enter image description here

enter image description here

要查找过去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
----+------+------------+-------------------

希望有所帮助