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

最初に 'stocks' クラスで UPSERT を実行し、次に 1 日に数回価格を追加してデータをロードしています。

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

私がやりたいのは、すべての stocks.stock_symbol 値を取得し、(平均を使用して) 過去 24 時間以内に price.price_value を集計することです (したがって、prices.price_created_datetime でフィルタリングします)。

私は Web ベースのスタジオを使用しており、いくつかの異なる方法をいじりましたが、ほとんどのクエリが何も返さないときに概念を理解するのに苦労しています。Java アプリケーションに組み込まれた OrientDB 2.1.9 を実行しています。

どんな助けでも大歓迎です。

4

1 に答える 1

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
----+------+------------+-------------------

それが役に立てば幸い

于 2016-01-27T03:44:23.033 に答える