我正在使用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...)
答案 0 :(得分:4)
不要使用||
自己连接逗号。您需要将其作为参数传递给listagg
:
listagg(cust_id, ',')