我最近开始关注来自关系背景(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应用程序中。
任何帮助将不胜感激。
答案 0 :(得分:2)
我尝试了这种结构(就像你的那样):
课程: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
----+------+------------+-------------------
希望有所帮助