Реплицируйте значения по набору группировки с несколькими группами в пределах группировки, установленной по дате - PullRequest
0 голосов
/ 04 октября 2019

Ниже приведен пример исходных данных:

enter image description here

Ожидаемый результат следующий:

enter image description here

Данные в основном группируются по A_ID, B_ID, C_ID, а затем в пределах этого значения для каждого времени, когда GR_CNT равен NULL, соответствующие значения для GR_MATERIAL и GR_SERIAL реплицируются для вышеуказанных строк. LAST_DT и DATE_TIME отсортированы в порядке возрастания.
Ниже приведен запрос, который я пробовал, но я не уверен, как получить значения GR_MATERIAL и GR_SERIAL, которые находятся посередине в данных.

sel a.*,coalesce(max(GR_MATERIAL) over (partition by A_ID, B_ID, C_ID order by LAST_DT,DATE_TIME), -1) as col2,<br>
coalesce(max(GR_SERIAL) over (partition by A_ID, B_ID, C_ID order by LAST_DT,DATE_TIME), -1) as col3<br>
from table a<br>

Создание двух новых столбцов для GR_MATERIAL и GR_SERIAL с необходимыми значениями также подойдет.

Я использую TD16

1 Ответ

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

Без ROWS ваш текущий запрос возвращает Max по всем строкам, то есть Group Max .

Возможно, вы хотите

LAST_VALUE(GR_MATERIAL IGNORE NULLS) 
over (partition by A_ID, B_ID, C_ID 
      order by LAST_DT DESC, DATE_TIME DESC)

. Это заменяет Nulls предыдущимзначение.

...