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