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;
我有一个历史记录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;