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

Oracle 1.2 ListAgg with keep (dense_rank) gives extra comma in the list

我正在使用 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...)

也会发生同样的事情

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

listagg(cust_id, ',')