Oracle - дополнительная проверка столбцов с помощью функции min и группирования по - PullRequest
0 голосов
/ 24 февраля 2012

В моей таблице Oracle есть столбцы: message_id, status, status_date

Я хотел бы вернуть message_id, где при группировке по message_id запись со значением mininum для status_date имеет значение «PC» в столбце состояния. Другими словами, не возвращайте запись, если запись, возвращаемая с минимальным значением status_date при группировании по mess_id, не имеет значения «PC» в столбце состояния.

Спасибо

Brian

1 Ответ

0 голосов
/ 24 февраля 2012

Полагаю, вот как могут выглядеть исходные данные:

message_id status status_date
---------- ------ -----------
         1 PC     01-JAN-12
         1 QC     02-JAN-12
         1 RC     03-JAN-12
         2 AA     04-JAN-12
         2 PC     05-JAN-12
         2 CC     06-JAN-12
         3 PC     07-JAN-12
         3 PC     08-JAN-12
         3 PC     09-JAN-12

И что ожидаемый результат будет примерно таким:

message_id
----------
         1 
         3 

Причина, по которой эти две записи возвращаются, заключается в том, что для всех записей, где message_id=1, запись с минимальным значением status_date имеет значение 01-JAN-12. Запись с message_id=1 и status_date от 01-JAN-12 имеет статус «ПК», а также с message_id=3. Поскольку минимум status_date записей с message_id=2 - 04-JAN-12, а его статус НЕ «ПК».

Мы можем построить этот запрос, используя встроенные представления, но, вероятно, есть более простой способ использования аналитических функций.

SELECT A.MESSAGE_ID
FROM   MY_TABLE A, 
       (  SELECT B.MESSAGE_ID, MIN(B.STATUS_DATE) MIN_DATE
          FROM MY_TABLE B
          GROUP BY B.MESSAGE_ID ) C
WHERE  A.STATUS = 'PC' 
AND    A.STATUS_DATE = C.STATUS_DATE 
AND    A.MESSAGE_ID = C.MESSAGE_ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...