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

그러나 나는 내 클라이언트 시간대 (웹 브라우저)에 따라이 집계를 수행해야합니다.

SELECT END_PROCESSING.asDate('Europe/London') 

이를 달성 할 수있는 방법이 있나요 아니면 내가 위의 레이어 (자바)에이 집계를 수행해야합니다

이상적으로는이 비슷한 것입니까?

+0

난 당신이 자바에서 그것을해야한다고 생각, 당신은 또한 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

답장을 보내 주셔서 감사합니다. 귀하가 제안한 문제점은 서로 다른 시간대에서 이루어진 두 가지 요청에 대해 동일한 결과를 반환한다는 것입니다. DB의 집계는 사용자의 시간대를 고려해야합니다. – Eduardo