Как добавить один и тот же столбец дважды и заставить его показывать другое значение? - PullRequest
0 голосов
/ 25 февраля 2020

Интересно, есть ли разумные способы переписать следующий запрос, чтобы он отображал 'MY_LOAD_STATUS' дважды в одной строке вместе с 'MY_LOAD_TIMESTAMP', чтобы я мог затем подсчитать реальное время выполнения загрузки, добавив еще один столбец, который будет вычесть MIN (MY_LOAD_TIMESTAMP) из MAX (MY_LOAD_TIMESTAMP)?

Мой текущий оператор выбора выглядит следующим образом:

SELECT MY_LOAD_DETAILS_ID,
        MY_LOAD_ID,
        MY_LOAD_SOURCE_SYSTEM,
        CAST(CAST(MY_LOAD_TIMESTAMP AS CHAR(19)) AS TIMESTAMP(0)),
        CAST(CAST(MY_LOAD_TIMESTAMP AS TIMESTAMP FORMAT 'dd/mm/yyyyBhh:mi:SS.s(6)') AS DATE) AS "START DATE",
        CAST(CAST(MY_LOAD_TIMESTAMP AS TIMESTAMP FORMAT 'dd/mm/yyyyBhh:mi:SS.s(6)') AS TIME) AS "START TIME ",
        MY_LOAD_STATUS,
        MY_LOAD_WORKFLOW_NAME
    FROM MY_PROD_DB.MY_LOAD_DETAILS
    WHERE MY_LOAD_ID='869230' 
    order by MY_LOAD_DETAILS_ID DESC;

Вывод выглядит следующим образом:

 MY_LOAD_DETAILS_ID     MY_LOAD_ID   MY_LOAD_SOURCE_SYSTEM    MY_LOAD_TIMESTAMP     START DATE     START TIME       MY_LOAD_STATUS      MY_LOAD_WORKFLOW_NAME

    5558                869230             SSS              2020-02-04 14:46:32   2020-02-04   14:46:32.000000     SUCCEEDED          wf_RRR_LOAD_FROM_SSS
  5557                869230             SSS              2020-02-04 14:44:03   2020-02-04   14:44:03.000000      STARTED           wf_RRR_LOAD_FROM_SSS

I хотелось бы, чтобы это было примерно так:

MY_LOAD_ID   MY_LOAD_SOURCE_SYSTEM    MY_LOAD_TIMESTAMP (for Started)  MY_LOAD_TIMESTAMP (for Succeeded)   START DATE     START TIME       MY_LOAD_STATUS (for Started)  MY_LOAD_STATUS (for Succeeded)    MY_LOAD_WORKFLOW_NAME  MY_LOAD_TIMESTAMP (for Succeeded)-MY_LOAD_TIMESTAMP (for Started)

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

Энди

1 Ответ

0 голосов
/ 25 февраля 2020

Вы просто хотите агрегировать?

SELECT MY_LOAD_DETAILS_ID, MY_LOAD_ID, MY_LOAD_SOURCE_SYSTEM,
       MIN(MY_LOAD_TIMESTAMP) as Start_date,
       MIN(MY_LOAD_TIMESTAMP) as Stop_date,
       MY_LOAD_STATUS,
       MY_LOAD_WORKFLOW_NAME
FROM MY_PROD_DB.MY_LOAD_DETAILS
WHERE MY_LOAD_ID = '869230' 
GROUP BY MY_LOAD_DETAILS_ID, MY_LOAD_ID, MY_LOAD_SOURCE_SYSTEM, MY_LOAD_STATUS, MY_LOAD_WORKFLOW_NAME
order by MY_LOAD_DETAILS_ID DESC;
...