2015-08-11 3 views
0

Мне нужно получить количество инвентаря, сгруппированное по дате. Я использовал следующий запрос. Моя проблема заключается в том, что приложение, находящее данные, является EST, а db работает в часовой пояс GMT. Поэтому, когда я выбираю конкретную дату в приложении, он должен получить соответствующую дату GMT и получить ее счет. В настоящее время им является запрос с использованиемORACLE EST GMT date issue

SELECT tble.dte, COUNT(DISTINCT INVENTORY_ID)As cmt 
    FROM ATL_GROUNDING_INFO groundinginfo 
     right join (SELECT 
        TO_DATE('03/11/2015 04:00:00','MM/DD/YYYY HH24:MI:SS') - 1 + rownum dte 
        FROM DUAL 
        CONNECT BY ROWNUM < 366 
         AND 
     TO_DATE('03/11/2015 04:00:00','MM/DD/YYYY HH24:MI:SS') - 1 + rownum <= 
         TO_DATE('04/02/2015 03:59:59','MM/DD/YYYY HH24:MI:SS') 
       ) tble 
       ON tble.dte = (groundinginfo.DATE_TURNED_IN) 
group by tble.dte 
order by tble.dte desc` 

Но в этом случае подсчет неверен, как 11 марта EST = 11March 04:00:00 утра до 12 Mar 03:59:59 GMT. поэтому, когда я искал 11 марта, мне нужно получить данные между указанным выше диапазоном дат от БД. пожалуйста, помочь

+0

Форматирование кода будет сделать намного легче читать. Сохраняете ли вы данные в столбцах «date»? столбцы timestamp с часовым поясом? Или что-то другое? –

+0

DATE_TURNED_IN IS даты DATATYPE IN DB – Ann

+0

OK. И вы действительно хотите преобразовать это в EST? Или US/Eastern (что может быть EST или EDT)? –

ответ

0

Предполагая EST это ваш SESSIONTIMEZONE вы можете сделать это следующим образом:

WITH t AS 
    (SELECT TIMESTAMP '2015-04-02 04:00:00' + ROWNUM * INTERVAL '1' DAY AS DT 
    FROM dual 
    CONNECT BY TIMESTAMP '2015-04-02 04:00:00' + ROWNUM * INTERVAL '1' DAY <= TIMESTAMP '2015-11-03 04:00:00') 
SELECT tble.dte, COUNT(DISTINCT INVENTORY_ID)As cmt 
FROM ATL_GROUNDING_INFO groundinginfo 
    right join t ON FROM_TZ(CAST(dte AS TIMESTAMP), 'UTC') = DT 

или более явно:

WITH t AS 
    (SELECT TIMESTAMP '2015-04-02 04:00:00 EST' + ROWNUM * INTERVAL '1' DAY AS DT 
    FROM dual 
    CONNECT BY TIMESTAMP '2015-04-02 04:00:00 EST' + ROWNUM * INTERVAL '1' DAY <= TIMESTAMP '2015-11-03 04:00:00 EST') 
SELECT tble.dte, COUNT(DISTINCT INVENTORY_ID)As cmt 
FROM ATL_GROUNDING_INFO groundinginfo 
    right join t ON FROM_TZ(CAST(dte AS TIMESTAMP), 'UTC') = DT 
+0

получение ошибки не групповой групповой функции – Ann

+0

Забыл группу по условию, очевидно, –

Смежные вопросы