让我们看看下面的例子,
SELECT * FROM user_objects WHERE status in ('INVALID','VALID') AND ROWNUM<=2;
通过使用上述查询,我只能获取表格中的前两个值,无论状态是“有效”还是“无效”。
让我们说,如果第一个&amp; status列的第二个值是'INVALID',我可能只获得具有'INVALID'状态的行。如果第一个&amp;状态列的第二个值都是“有效”和“有效”。 'INVALID',我可能会获得具有两个状态列的行。最后,如果第一个&amp;状态的第二个值是'VALID',我可能只获得具有'VALID'状态列的行。
我需要的是,无论列中的订单中存在“状态”值,我都需要“有效”和“有效”的第一个值。 'INVALID'使用动态查询。
输出应该是这种类型的东西,
先谢谢你的帮助..
答案 0 :(得分:2)
您的查询与&#34;第一行&#34;无关。在表中。表表示无序集。因此,结果集可以是任何顺序的行。
在任何情况下,如果您想要每个状态的第一行(基于created
),请使用row_number()
:
SELECT uo.*
FROM (SELECT uo.*,
ROW_NUMBER() OVER (PARTITION BY status ORDER BY CREATED) as seqnum
FROM user_objects uo
WHERE status in ('INVALID', 'VALID')
) uo
WHERE seqnum = 1