Запрос DB2 с несколькими случаями WITH AS не компилируется - PullRequest
0 голосов
/ 04 октября 2019

По какой-то причине я не могу выполнить этот запрос, поскольку получаю сообщение об ошибке:

Token ( was not valid. Valid tokens: , FROM INTO.

Я выполняю это в DB2 и думаю, что это происходит либо в самомпервая строка 2-го with/as в ) , A AS ( SELECT

Где я иду не так?

WITH
  RES (PRODUCT_ID, JOB_STATUS, JOB_STATUS_TIME) AS
(
select
    T1.NAME,
    t2.PRODUCT_id as PRODUCT_ID,
    t3.product_id,
    t3.created_at,
    t5.name as JOB_STATUS,
    t4.row_created_timestamp as JOB_STATUS_TIME ,
    t3.expiration_timestamp
from schema.PRODUCT T1
inner join schema.PRODUCT_to_product T2
on t1.PRODUCT_id = t2.PRODUCT_id
inner join schema.product t3
on t2.product_id = t3.product_id
inner join schema.product_to_job_statust t4
on t3.product_id = t4.product_id
inner join schema.job_statust t5
on t4.job_statust_id = t5.job_statust_id
where t3.job_typet_id = 2
    and t3.created_at >= '2019-09-20'
    and t5.name <> 'D'
order by t1.name,t3.product_id
)
, A AS
(
SELECT
  PRODUCT_ID, JOB_STATUS
, JOB_STATUS_TIME
, LEAD (JOB_STATUS_TIME) OVER (PARTITION BY PRODUCT_ID ORDER BY JOB_STATUS_TIME) AS JOB_STATUS_TIME_NEXT
FROM RES
)
SELECT
  PRODUCT_ID
, COUNT(CASE JOB_STATUS WHEN 'O' THEN 1 END) AS CREATED
, COUNT(CASE JOB_STATUS WHEN 'C' THEN 1 END) AS COMPLETED
, COUNT(CASE JOB_STATUS WHEN 'X' THEN 1 END) AS CANCELLED
, SUM
  (
  CASE JOB_STATUS WHEN 'P' THEN
    (DAYS(JOB_STATUS_TIME_NEXT) - DAYS(JOB_STATUS_TIME)) * 86400
  + MIDNIGHT_SECONDS(JOB_STATUS_TIME_NEXT) - MIDNIGHT_SECONDS(JOB_STATUS_TIME)
  END
  ) / 60 AS ACTIVE_MINUTES
FROM A
GROUP BY PRODUCT_ID;

1 Ответ

3 голосов
/ 04 октября 2019

Всегда полезно использовать редактор SQL, который поддерживает версию Db2, которую вы используете.

Глядя на ваш SQL в IBM Data Studio с установленным значением проверки DB2 for i 7.2, выделите следующую строку красным подчеркиванием

, LEAD (JOB_STATUS_TIME) OVER (PARTITION BY PRODUCT_ID ORDER BY JOB_STATUS_TIME) AS JOB_STATUS_TIME_NEXT`

Перекрестные ссылки на руководство, я вижу, что LEAD поддерживается в Db2 для i 7.3, но не для Db2 для i 7.2

https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/db2/rbafzolapexp.htm

Так что я бы предположил ошибку синтаксиса

...