Запрос с диапазоном дат и определенным интервалом времени? - PullRequest
1 голос
/ 13 мая 2011

У меня есть этот запрос для БД DB2, где мне нужно получить данные между датами и определенным временем.Я пришел с запросом ниже, и он работает, но не получает данные за день между 20110510 и 20110512, в данном случае 20110511, эти данные должны быть за весь день.

Даты и времяпараметры пользователя, так что это будет меняться в зависимости от их потребностей.Я также хочу иметь возможность получать данные за тот же день по одному и тому же запросу, например:

Date last modify >= 20110512 AND
Date last modify <= 20110512 AND
Time last modify >= 090000   AND
Time last modify <= 230000   AND

Любая помощь будет заранее признательна.Спасибо.

SELECT A1.CHCASN, A1.CHTRKN,
SUM(A2.CDPAKU) AS UNITS, A1.CHACWT, SUM(A2.CDPRC * A2.CDPAKU) AS COST, SUM(A3.STRPRC * A2.CDPAKU) AS RETAIL, A1.CHDLM, A1.CHTLM
FROM CHCART00 A1, CDCART00 A2, STSTYL00 A3
WHERE A1.CHCASN = A2.CDCASN
AND A2.CDSTYL = A3.STSTYL
AND A2.CDCOLR = A3.STCOLR
AND A2.CDSDIM = A3.STSDIM
AND A1.CHSTAT = '25'
AND (A1.CHDLM = 20110510 AND A1.CHTLM >= '200000' OR A1.CHDLM = 20110512 AND A1.CHTLM <= '092000') AND A1.CHROUT = 'UPSPA'
GROUP BY A1.CHCASN, A1.CHTRKN, A1.CHACWT, A1.CHDLM, A1.CHTLM
ORDER BY A1.CHDLM, A1.CHTLM

Ответы [ 4 ]

0 голосов
/ 27 января 2016

Простой способ получить запрос:

SELECT
  num_executions,
  num_exec_with_metrics,
  SUBSTR(stmt_text,1,2000000) AS stmt_text
FROM TABLE (MON_GET_PKG_CACHE_STMT('d', null, null, -1)) AS tf
WHERE
  (VARCHAR_FORMAT(INSERT_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS') > '2016-01-27 07:00:00'
  AND VARCHAR_FORMAT(INSERT_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS') <= '2016-01-27 08:59:59')
ORDER BY INSERT_TIMESTAMP DESC;
0 голосов
/ 13 мая 2011

Примеры: -

(Между двумя датами)

`SELECT A1.CHCASN, A1.CHTRKN, SUM(A2.CDPAKU) AS UNITS, A1.CHACWT,
    SUM(A2.CDPRC * A2.CDPAKU) AS COST, SUM(A3.STRPRC * A2.CDPAKU) AS RETAIL,     
    A1.CHDLM, A1.CHTLM FROM CHCART00 A1, CDCART00 A2, STSTYL00 A3  
WHERE A1.CHCASN = A2.CDCASN AND A2.CDSTYL = A3.STSTYL AND      
    A2.CDCOLR = A3.STCOLR     AND A2.CDSDIM = A3.STSDIM AND A1.CHSTAT = '25' AND
    (A1.CHDLM BETWEEN 20110510 AND 20110512)      
    AND A1.CHROUT = 'UPSPA' GROUP BY A1.CHCASN, A1.CHTRKN, A1.CHACWT,
    A1.CHDLM, A1.CHTLM  
ORDER BY A1.CHDLM, A1.CHTLM` 

(та же дата)

`SELECT A1.CHCASN, A1.CHTRKN, SUM(A2.CDPAKU) AS UNITS, A1.CHACWT,
    SUM(A2.CDPRC * A2.CDPAKU) AS COST, SUM(A3.STRPRC * A2.CDPAKU) AS RETAIL,     
    A1.CHDLM, A1.CHTLM FROM CHCART00 A1, CDCART00 A2, STSTYL00 A3  
WHERE A1.CHCASN = A2.CDCASN AND A2.CDSTYL = A3.STSTYL AND      
    A2.CDCOLR = A3.STCOLR     AND A2.CDSDIM = A3.STSDIM AND A1.CHSTAT = '25' AND
    (A1.CHDLM = 20110511)     
    AND A1.CHROUT = 'UPSPA' GROUP BY A1.CHCASN, A1.CHTRKN, A1.CHACWT,
    A1.CHDLM, A1.CHTLM  
ORDER BY A1.CHDLM, A1.CHTLM `
0 голосов
/ 20 мая 2011

Одним из решений является объединение столбцов даты и времени в метку времени или аналогичную структуру, которую гораздо проще использовать для поиска в диапазоне по нескольким дням.Неважно, какой тип данных используется;просто убедитесь, что он соответствует некоторому формату ГГГГММДДЧЧММСС и преобразуйте ваши входные параметры таким же образом, чтобы их можно было сравнивать с данными столбца.

Допущения:

  • Столбец столбца CHDLM в таблице CHCART00 имеет значение INTEGER и сохраняет даты в формате ГГГГММДД
  • Столбец столбца CHTLM в таблице CHCART00 имеет значение CHAR (6) и сохраняетвремя в 24-часовом формате ЧЧММСС
  • Окно, указанное во входных параметрах, непрерывно, без пропусков, таких как «только рабочие часы»

    AND ( BIGINT( A1.CHDLM ) * 1000000 + INTEGER( A1.CHTLM ))

    >= ( BIGINT( 20110510 ) * 1000000 + INTEGER('230000'))

    AND ( BIGINT( A1.CHDLM ) * 1000000 + INTEGER( A1.CHTLM ))

    <= ( BIGINT( 20110512 ) * 1000000 + INTEGER('090000'))

0 голосов
/ 13 мая 2011

Похоже, что в предложении WHERE отсутствуют некоторые круглые скобки

Попробуйте: -

SELECT A1.CHCASN, A1.CHTRKN, SUM(A2.CDPAKU) AS UNITS, A1.CHACWT, 
    SUM(A2.CDPRC * A2.CDPAKU) AS COST, SUM(A3.STRPRC * A2.CDPAKU) AS RETAIL,
    A1.CHDLM, A1.CHTLM FROM CHCART00 A1, CDCART00 A2, STSTYL00 A3 
WHERE A1.CHCASN = A2.CDCASN AND A2.CDSTYL = A3.STSTYL AND 
    A2.CDCOLR = A3.STCOLR AND A2.CDSDIM = A3.STSDIM AND A1.CHSTAT = '25' AND
    ((A1.CHDLM = 20110510 AND A1.CHTLM >= '200000') 
    OR
    (A1.CHDLM = 20110511)
    OR
    (A1.CHDLM = 20110512 AND A1.CHTLM <= '092000')) 
    AND A1.CHROUT = 'UPSPA' GROUP BY A1.CHCASN, A1.CHTRKN, A1.CHACWT, 
    A1.CHDLM, A1.CHTLM 
ORDER BY A1.CHDLM, A1.CHTLM 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...