【发布时间】:2021-11-16 22:04:25
【问题描述】:
我有一个包含一堆数据的表。数据示例如下:强调文本:
| DTE | UNIQUE_ID | ROW_DATA | CALL_ROW_ID |
|---|---|---|---|
| 8/1/2021 | 11234 | DCNS=FAILED\|HYPO= |
1 |
| 8/1/2021 | 11234 | DCNS=ACCEPTED \| HYPO=NEW CREDIT |
2 |
| 8/1/2021 | 11234 | DCNS=FAILED\|HYPO=GIVE ME BIRTHDAY= |
4 |
| 8/1/2021 | 11234 | DCNS=ACCEPTED\|HYPO=YES |
7 |
| 8/1/2021 | 11234 | DCNS=CONFIRMED\|HYPO=JULY 25th 2019 |
10 |
我有一个查询试图将某些数据堆叠在一行中。查询试图拉回:日期、unique_id,并获取第一个和最后一个 HYPO。
SELECT
DTE,
UNIQUE_ID,
MIN(CASE WHEN HYPO > 0 THEN TRIM(SUBSTR(ROW_DATA, HYPO + 7, INSTR(ROW_DATA, '|', HYPO + 7) - (HYPO + 7))) END ) FIRST_HYPO,
MAX(CASE WHEN HYPO > 0 THEN TRIM(SUBSTR(ROW_DATA, HYPO + 7, INSTR(ROW_DATA, '|', HYPO + 7) - (HYPO + 7))) END ) LAST_HYPO
FROM
(SELECT DTE, UNIQUE_ID, ROW_DATA, INSTR(ROW_DATA, '| HYPO=') as HYPO
FROM
(SELECT TO_CHAR(DTE, 'MM/DD/YYYY' AS DTE, UNIQUE_ID, '| ' || ROW_DATA || ' |' as ROW_DATA, CALL_ROW_ID
FROM DATATABLE))
我想要得到的是:
| DTE | UNIQUE_ID | FIRST_HYPO | LAST_HYPO |
|---|---|---|---|
| 8/1/2021 | 11234 | NEW_CREDIT | JULY 25th 2019 |
但我得到的是
| DTE | UNIQUE_ID | FIRST_HYPO | LAST_HYPO |
|---|---|---|---|
| 8/1/2021 | 11234 | GIVE ME BIRTHDAY | YES |
这很奇怪,因为数据是有序的,但 MIN/MAX 选择了不同的行。我尝试在所有级别的查询中执行ORDER BY,但并不能修复结果。它总是拉回相同的字段。
有谁知道如何解决这个问题?
【问题讨论】:
-
您的查询有语法错误。在
TO_CHAR之后缺少);CALL_DATE列不存在;它使用聚合列和非聚合列的混合,没有GROUP BY子句。请edit您的问题,以便它实际运行。此外,您正在匹配| HYPO,但某些数据在|和H之间没有空格。