问题描述
我有一个名为ARTICLE的表,其中包含许多列,尤其是MFC和ANA。我想要每个MFC的第一个ANA都不为空。
所以,我写了这个查询:
select mfc,first_value(ana) over(partition by mfc) as FirstAna
from article
where ana is not null
但是它为每个MFC返回许多行。 解决办法是什么?
解决方法
似乎您不在乎要返回哪个值(没有ORDER BY
子句),为什么不
select mfc,max(ana)
from article
where ana is not null
group by mfc
,
First_value仍将为每一行返回值,但该值将是该分区的第一个值。如果要将每个组的值限制为一个值,则必须按功能使用组。
,您必须通过使用ORDER BY
子句并使用关键字DISTINCT
来定义第一个含义,这样每个mfc
不会多次获得同一行:
select distinct
mfc,first_value(ana) over (partition by mfc order by somecolumn) as FirstAna
from article
where ana is not null
用定义顺序的列名称更改somecolumn
。
您显然要做关心哪个值。在Oracle中,您可以使用keep
:
select mfc,max(ana) keep (dense_rank first order by ???) as FirstAna
from article
where ana is not null
group by mfc;
???
用于指定“第一”顺序的列。