Из следующей таблицы я пытаюсь получить определенные строки на основе критериев
+----+--------------+------+
| ID | UPDATED_DATE | TYPE |
+----+--------------+------+
| 1 | 01/13 | P |
| 1 | 02/13 | P |
| 1 | 03/13 | P |
| 2 | 01/14 | P |
| 2 | 02/14 | W |
| 2 | 03/14 | P |
| 2 | 04/14 | W |
| 2 | 05/14 | P |
| 2 | 06/14 | P |
+----+--------------+------+
Expected rows:
+----+--------------+------+
| ID | UPDATED_DATE | TYPe |
+----+--------------+------+
| 1 | 01/13 | P |
| 2 | 05/14 | P |
+----+--------------+------+
Критерии:
Если тип "W" существует в любой из строк дляидентификатор затем получить следующее вхождение «P» после «W».Если нет, получите первое вхождение 'P'.Если для каждого идентификатора есть две буквы «W», то после последней буквы «W»
получите «P». Мне удалось получить необходимую строку, если я передал ID.Но я хочу запустить это для всей таблицы и получить необходимые строки.
SELECT
CASE
WHEN (
SELECT
MAX(UPDATED_DATE)
FROM
TABLE_NAME
WHERE
ID = '1'
AND TYPE = 'W'
) IS NULL THEN
(
SELECT
MIN(UPDATED_DATE)
FROM
TABLE_NAME
WHERE
ID = '1'
)
ELSE
(
SELECT
MIN(UPDATED_DATE)
FROM
TABLE_NAME
WHERE
ID = '1'
AND UPDATED_DATE > (
SELECT
MAX(UPDATED_DATE)
FROM
TABLE_NAME
WHERE
ID = '1'
AND TYPE = 'W'
)
)
END
FROM
dual;