如何在表中生成特定列值的第一个值..?

时间:2015-12-15 12:10:25

标签: sql oracle

让我们看看下面的例子,

SELECT * FROM user_objects WHERE status in ('INVALID','VALID') AND ROWNUM<=2;

通过使用上述查询,我​​只能获取表格中的前两个值,无论状态是“有效”还是“无效”。

让我们说,如果第一个&amp; status列的第二个值是'INVALID',我可能只获得具有'INVALID'状态的行。如果第一个&amp;状态列的第二个值都是“有效”和“有效”。 'INVALID',我可能会获得具有两个状态列的行。最后,如果第一个&amp;状态的第二个值是'VALID',我可能只获得具有'VALID'状态列的行。

我需要的是,无论列中的订单中存在“状态”值,我都需要“有效”和“有效”的第一个值。 'INVALID'使用动态查询。

输出应该是这种类型的东西,

enter image description here

先谢谢你的帮助..

1 个答案:

答案 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