Oracle 1.2 ListAgg with keep(dense_rank)在列表中给出了额外的逗号

时间:2015-09-25 14:27:58

标签: sql oracle oracle11gr2

我正在使用KEEP (DENSE_RANK LAST)分析函数来获取组中的最后一个值,并且我还使用LISTAGG函数从以前的结果生成列表。奇怪的是,列表末尾有一个额外的分隔符。有谁知道为什么,或者这是Oracle中的错误?

这是一个简化的演示:

with mydata as (
  select to_date('4/1/2015','mm/dd/yyyy') next_due, 51528 cust_id from dual
   union all select  to_date('4/1/2015','mm/dd/yyyy'), 5364 from dual
   union all select  to_date('4/3/2015','mm/dd/yyyy'), 51468 from dual
), i1 as (
  select cust_id, 
         max(next_due) keep (dense_rank last order by next_due) max_date
    from mydata
   group by cust_id
)
select max_date, 
       listagg(cust_id||',') within group (order by 1) maxdate_list
  from i1
 group by max_date

,结果是

MAX_DATE   MAXDATE_LIST   
---------- ---------------
04/01/2015 51528,5364,    
04/03/2015 51468,

请注意每个MAXDATE_LIST末尾的不受欢迎的逗号?如果我切换到FIRST_VALUE() OVER (PARTITION...)

,也会发生同样的事情

1 个答案:

答案 0 :(得分:4)

不要使用||自己连接逗号。您需要将其作为参数传递给listagg

listagg(cust_id, ',')