2016-11-28 87 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