Oracle / sql / jpa - Как выбрать таблицу с максимальным объемом данных (столбцом) для каждых 7 дней в таблице с годовым интервалом? - PullRequest
3 голосов
/ 14 марта 2011

У меня есть таблица следующих столбцов:

Метка времени (timestamp), данные (целое число), id1 (целое число), id2 (целое число)

Мой пользователь сможет указать три ввода: дату начала (нормализовано до воскресенья), дату окончания (нормализовано до субботы) и список id1.

Просто, чтобы упростить мой вопрос, предполагая, что начальная дата - 1 января 2010 года, предполагаемая как воскресенье, конечная дата - 31 декабря 2010 года, предполагаемая как суббота, а список id1 - {100, 101, 102}, мой вопрос:

Как мне составить «одну» строку SQL, чтобы собрать максимум (данные) за каждый 7-дневный период, начиная с 1 января по 31 декабря, для каждого уникального id1 и id2?

Также возможно ли это сделать с помощью типизированного безопасного запроса JPA?

Обратите внимание, что я использую 7-дневный период вместо недели, потому что здесь нет контекста недели, чтобы избежать граничных вопросов, например, что делать с 29 декабря 20xx года, приходящегося на первую неделю года 20xx + 1, и т. Д.

Большое спасибо за ваши ответы заранее!

-Rajan

1 Ответ

1 голос
/ 14 марта 2011

В формате даты 'WW' указывается номер недели в году.

SELECT id1
      ,id2
      ,TRUNC(Timestamp,'WW')
      ,MAX(data)
FROM mytable
WHERE Timestamp BETWEEN :start AND :end
GROUP BY id1, id2, TRUNC(Timestamp,'WW');

Если 'WW' не делает этого за вас (проблемы с границами), вы можете вместо этого взять номер дня.('DDD') и разделите на 7, например:

TRUNC(TO_NUMBER(TO_CHAR(Timestamp,'DDD'))/7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...