Oracle:从listagg中的日期提取年份



我有一个带有日期列的表,希望获得一个具有不同年份的字符串:

ID   DATA
1    01/01/2010
2    02/01/2010
3    01/03/2011
4    03/01/2014
5    05/02/2014

从上表和使用listagg,我想获得年份

2010
2011
2014

但是当我运行以下查询时:

SELECT LISTAGG(EXTRACT(year from data),',') 
       WITHIN GROUP (ORDER BY data)
FROM (SELECT distinct EXTRACT(year from data) 
      FROM t_teste)

我得到以下错误

ORA-00904:"DATA":无效标识符

知道我做错了什么吗?

您使用的子查询没有为提取的年份值指定别名,并且表中的data列不再可见,因为它只在子查询的范围内。

您可以添加一个列别名,然后在外部查询中直接引用它,而不需要另一个提取:

select listagg(anno, ',') within group (order by anno)
from (
  select distinct extract(year from data) as anno
  from t_teste
);
LISTAGG(ANNO,',')WITHINGROUP(ORDERBYANNO)
-----------------------------------------
2010,2011,2014                           

相关内容

  • 没有找到相关文章

最新更新