【发布时间】:2016-02-05 16:35:44
【问题描述】:
我需要帮助来解决这个特定的 sql 问题,我无法编写存储过程,因为我需要将它移植到 Hive。
有两个 tQCles Contr 和 Lvl,我需要将它们左连接并使用前一行的值填充连接的 tQCle 中 LVL 的空值。 我在
中有示例 tQClesContr
| 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) |
现在我需要用值填充来自 LVl tQCle 的空 ACTY_SEQ_NBR 的值。 标准是,从 CONTR(即从加入的 tQCle 的第 4 列)中找到相应的 ACTY_SEQ_NBR,并从 LVL 中找到 ACTY_SEQ_NBR,其中 ACTY_SEQ_NBR 较小 对于相同的 id、eff_dt 和 m_nbr,大于或等于来自 CONTR ACTY_SEQ_NBR 的值。
为了。例如第2行的ACTY_SEQ_NBR为空,对应的Contr ACTY_SEQ_NBR为2,LVL小于2的ACTY_SEQ_NBR值为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 |
感谢任何帮助
【问题讨论】:
标签: mysql sql sql-server oracle hive