Мне нужна помощь для решения этой конкретной проблемы sql, я не могу написать хранимые procs, поскольку мне нужно передать это в Hive.Второе самое низкое значение из другой таблицы после присоединения
Есть два tQCles Contr и Lvl, и мне нужно, чтобы они присоединились к ним и заполнили нулевые значения из LVL в объединенном tQCle со значениями из предыдущей строки. У меня есть образцы tQCles в
Contr
| id | EFF_DT | M_NBR | ACTY_SEQ_NBR | L_CD |
|---------|------------|-------|--------------|------|
| QQFAE46 | 2000-12-24 | 11 | 1 | POT |
| QQFAE46 | 2000-12-24 | 11 | 2 | POT |
| QQFAE46 | 2000-12-24 | 11 | 3 | POT |
| QCC5433 | 2013-04-21 | 00 | 1 | MIC |
| QCC5433 | 2013-04-21 | 00 | 2 | MIC |
| QCC614E | 2015-07-18 | 00 | 1 | MIC |
| QCC614E | 2015-07-18 | 00 | 4 | MIC |
| QC56DDF | 1999-10-01 | 14 | 2 | POT |
| QC56DDF | 1999-10-01 | 14 | 3 | POT |
| QC56DDF | 1999-10-01 | 14 | 4 | POT |
| ACB3DC2 | 1999-10-01 | 14 | 1 | POT |
LVL
| id | EFF_DT | M_NBR | ACTY_SEQ_NBR | OCCR |
|---------|------------|-------|--------------|------|
| QQFAE46 | 2000-12-24 | 11 | 1 | 100 |
| QQFAE46 | 2000-12-24 | 11 | 3 | 100 |
| QCC5433 | 2013-04-21 | 00 | 2 | 200 |
| QCC614E | 2015-07-18 | 00 | 3 | 200 |
| QC56DDF | 1999-10-01 | 14 | 1 | 0 |
LEFT JOIn of Contr and Lvl
| id | EFF_DT | M_NBR | ACTY_SEQ_NBR | L_CD | id | EFF_DT | M_NBR | ACTY_SEQ_NBR | OCCR |
|---------|------------|-------|--------------|------|---------|------------|--------|--------------|--------|
| QQFAE46 | 2000-12-24 | 11 | 1 | POT | QQFAE46 | 2000-12-24 | 11 | 1 | 100 |
| QQFAE46 | 2000-12-24 | 11 | 2 | POT | (null) | (null) | (null) | (null) | (null) |
| QQFAE46 | 2000-12-24 | 11 | 3 | POT | QQFAE46 | 2000-12-24 | 11 | 3 | 100 |
| QCC5433 | 2013-04-21 | 00 | 1 | MIC | (null) | (null) | (null) | (null) | (null) |
| QCC5433 | 2013-04-21 | 00 | 2 | MIC | QCC5433 | 2013-04-21 | 00 | 2 | 200 |
| QCC614E | 2015-07-18 | 00 | 1 | MIC | (null) | (null) | (null) | (null) | (null) |
| QCC614E | 2015-07-18 | 00 | 4 | MIC | (null) | (null) | (null) | (null) | (null) |
| QC56DDF | 1999-10-01 | 14 | 2 | POT | (null) | (null) | (null) | (null) | (null) |
| QC56DDF | 1999-10-01 | 14 | 3 | POT | (null) | (null) | (null) | (null) | (null) |
| QC56DDF | 1999-10-01 | 14 | 4 | POT | (null) | (null) | (null) | (null) | (null) |
| ACB3DC2 | 1999-10-01 | 14 | 1 | POT | (null) | (null) | (null) | (null) | (null) |
Теперь мне нужно заполнить значения для пустого ACTY_SEQ_NBR из LvL tQCle со значениями. Критерии: найдите соответствующий ACTY_SEQ_NBR из CONTR (например, из столбца 4 объединенного tQCle) и найдите ACTY_SEQ_NBR из LVL, где ACTY_SEQ_NBR меньше , чем или равно значению от CONTR ACTY_SEQ_NBR для тех же идентификаторов, eff_dt и m_nbr.
для. например, строка №2 имеет нулевое значение ACTY_SEQ_NBR. Соответствует Contr ACTY_SEQ_NBR 2, значение ACTY_SEQ_NBR, которое меньше 2 из LVL, равно 1.
Таким образом, мой идеальный выход должен быть похож на эту строку.
| id | EFF_DT | M_NBR | ACTY_SEQ_NBR | L_CD | id | EFF_DT | M_NBR | ACTY_SEQ_NBR | OCCR |
|---------|------------|-------|--------------|------|---------|------------|--------|--------------|--------|
| QQFAE46 | 2000-12-24 | 11 | 1 | POT | QQFAE46 | 2000-12-24 | 11 | 1 | 100 |
| QQFAE46 | 2000-12-24 | 11 | 2 | POT | (null) | (null) | (null) | 1 | (null) |
I tried a lag query but its not giving correct output for all values.
Я выполнил запрос Amniders, и я изменил результаты, чтобы получить ожидаемые значения. Вот мои ожидаемые значения
| ID | EFF_DT | M_NBR | ACTY_SEQ_NBR | L_CD | LVL_ID | LVL_EFF_DT | LVL_M_NBR | LVL_ACTY_SEQ_NBR | OCCR | CALC_LVL_ACTY_SEQ_NBR |
|---------|------------|-------|--------------|------|---------|------------|-----------|------------------|--------|-----------------------|
| QQFAE46 | 2000-12-24 | 11 | 1 | POT | QQFAE46 | 2000-12-24 | 11 | 1 | 100 | 1 |
| QQFAE46 | 2000-12-24 | 11 | 2 | POT | (null) | (null) | (null) | (null) | (null) | 1 |
| QQFAE46 | 2000-12-24 | 11 | 3 | POT | QQFAE46 | 2000-12-24 | 11 | 3 | 100 | 3 |
| QC56DDF | 1999-10-01 | 14 | 2 | POT | (null) | (null) | (null) | (null) | (null) | 1 |
| QC56DDF | 1999-10-01 | 14 | 3 | POT | (null) | (null) | (null) | (null) | (null) | 1 |
| QC56DDF | 1999-10-01 | 14 | 4 | POT | (null) | (null) | (null) | (null) | (null) | 1 |
| QCC5433 | 2013-04-21 | 00 | 1 | MIC | (null) | (null) | (null) | (null) | (null) | -99 |
| QCC5433 | 2013-04-21 | 00 | 2 | MIC | QCC5433 | 2013-04-21 | 00 | 2 | 200 | 2 |
| QCC614E | 2015-07-18 | 00 | 1 | MIC | (null) | (null) | (null) | (null) | (null) | -99 |
| QCC614E | 2015-07-18 | 00 | 4 | MIC | (null) | (null) | (null) | (null) | (null) | 3 |
| ACB3DC2 | 1999-10-01 | 14 | 1 | POT | (null) | (null) | (null) | (null) | (null) | -99 |
Любая помощь приветствуется
Спасибо за попытку, но запрос работает не так, как ожидалось. MAX не тот, который мне нужен, если значение theACTY_SEQ объединения таблицы LVL равно null, найдите значение ACTY_SEQ из таблицы LVL, которое меньше значения ACTY_SEQ соответствующей таблицы CONTR. – Abhi
Я с Amninder - можете ли вы предоставить исходный вопрос с образцами данных, которые на самом деле демонстрируют все варианты (и желаемые результаты каждого из них)? – KevinKirkpatrick