Sql Oracle 1.2 ListAgg和keep(密集排列)在列表中提供了额外的逗号

Sql Oracle 1.2 ListAgg和keep(密集排列)在列表中提供了额外的逗号,sql,oracle,oracle11gr2,Sql,Oracle,Oracle11gr2,我正在使用KEEP(densite\u RANK LAST)分析函数来获取组中的最后一个值,并且我正在进一步使用listag函数从以前的结果生成一个列表。奇怪的是在列表的末尾有一个额外的分隔符。有人知道原因吗,或者这是Oracle中的一个bug 下面是一个简化的演示: with mydata as ( select to_date('4/1/2015','mm/dd/yyyy') next_due, 51528 cust_id from dual union all select t

我正在使用
KEEP(densite\u RANK LAST)
分析函数来获取组中的最后一个值,并且我正在进一步使用
listag
函数从以前的结果生成一个列表。奇怪的是在列表的末尾有一个额外的分隔符。有人知道原因吗,或者这是Oracle中的一个bug

下面是一个简化的演示:

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\u列表末尾不需要的逗号
?如果我在(分区…)上切换到
FIRST\u VALUE()
也会发生同样的情况,请不要使用
|
连接逗号。您需要将其作为参数传递给
listag

listagg(cust_id, ',')

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

listagg(cust_id, ',')

那很容易!哼!谢谢,这很简单!哼!谢谢你,斯丹