2016-11-28 4 views
3

dayで集計されたデータを取得するには、orientDBを照会する必要があります。 例えば:OrientDB - タイムゾーン付きクエリ

SELECT OCCURRENCE, COUNT(1) AS NBR_VALUES FROM 
(
    SELECT END_PROCESSING.asDate().format('yyyy-MM-dd').asDate().asLong() AS OCCURRENCE 
    FROM MY_TABLE 
    WHERE END_PROCESSING >= ? AND END_PROCESSING <= ? 
) 
GROUP BY OCCURRENCE 

私は私のクライアントのタイムゾーン(Webブラウザ)に基づいて、この集計を実行する必要がありますが。

SELECT END_PROCESSING.asDate('Europe/London') 

これを達成する方法はありますか私は上記層(Java)の上で、この集約を実行する必要があります。

は、理想的には、これに似たものになるだろうか?

+0

私はあなたがJavaでそれを行うべきだと思う、あなたはまた、githubの上の機能要求を開こうとすることができます。 –

+0

問題は、このテーブルは数百万のレコードを持ち、すべての「未処理」データを取得するとパフォーマンスが非常に高くなる可能性があるということです。 新しい機能要求が追加されました:https://github.com/orientechnologies/orientdb/issues/6951 – Eduardo

+0

使用してインデックスを使用することができます –

答えて

0

oracle dbの経験に基づいて提案してください。 これをストアドプロシージャにするのはどうですか?データでオブジェクトを返すことができます。制限をパラメーターとして受け入れます。上位層(javascript/java)からパラメータを取得します。

は、私は(あなたのDB構文に翻訳してください)のようなものを意味する:

FUNCTION get_data(I_time1 TIMESTAMP, I_time2 TIMESTAMP) 
    RETURNS --your object type here--- 
    IS 
    BEGIN 
     SELECT OCCURRENCE, COUNT(1) AS NBR_VALUES INTO --your objects here-- 
    FROM 
    (
     SELECT END_PROCESSING.asDate().format('yyyy-MM-dd').asDate().asLong() AS OCCURRENCE 
     FROM MY_TABLE 
     WHERE END_PROCESSING >= I_time1 AND END_PROCESSING <= I_time2 
    ) 
    GROUP BY OCCURRENCE; 
    RETURN --your object-- 
    ; 
    END; 
    /
+0

返信いただきありがとうございます。あなたの提案の問題は、異なるタイムゾーンからの2つの要求に対して同じ結果を返すことです。 DB内の集計は、ユーザーのタイムゾーンを考慮する必要があります。 – Eduardo

関連する問題