ORACLE 从历史中找到第一个非空值 table

ORACLE find first non-null value from history table

我有一个历史记录table,我只想return第一个不为空的STATUS值(如果有的话)。我没有太多的 ORACLE 经验,我已经搜索过这个但找不到我需要的任何东西。

编辑 下面是我的 table 示例。

ITEM   NAME   STATUS
Item1  Test1  Null
Item1  Test2  Null
Item1  Test3  Approved
Item2  Test1  Null
Item2  Test2  Approved

在上面的示例中,我只想 return 以下行。

Item1 Test3 Approved
Item2 Test2 Approved

提前致谢。

您还没有指定 "first" 的意思(如何排序?),所以这样做:

SELECT *
FROM t
WHERE status IS NOT NULL
AND ROWNUM = 1;

我认为你的意思是:对于item的每个值,按名称对非NULL状态的行进行排序,并取第一个。如果正确:

SELECT * FROM (
  SELECT
    item, name, status,
    row_number() OVER (PARTITION BY item ORDER BY name) AS rn
  FROM t
  WHERE status is NOT NULL
)
WHERE rn = 1

参考@WW的回答,如果你想return所有项目那么只修改以下(即删除rownum条件)

SELECT *
FROM t
WHERE status IS NOT NULL;