2016-11-28 68 views
3

我需要查詢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 

不過,我需要進行基於我的客戶時區(網頁瀏覽器)此聚集。

理想情況下是與此類似:

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)。

我的意思是這樣(請翻譯成你的數據庫語法):

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

謝謝你的回覆。您的建議存在的問題是,它會針對從不同時區創建的兩個請求返回相同的結果。數據庫中的聚合必須考慮用戶的時區。 – Eduardo