我的Oracle表格包含以下列:message_id,status,status_date
我想返回message_id,当按message_id分组时,status_date的mininum值的记录在status列中的值为'PC'。 换句话说,如果按mess_id分组时返回的最小值为status_date的记录在状态列中没有值'PC',则不返回记录。
谢谢,
布赖恩
答案 0 :(得分:0)
我猜这是源数据的样子:
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的记录的状态为“PC”,与message_id=3
类似。由于status_date
的记录的最小message_id=2
为04-JAN-12,因此状态不是'PC'。
我们可以使用内联视图构建此查询,但使用分析函数可能更简单。
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;