2015-09-25 26 views
1

我正在使用KEEP (DENSE_RANK LAST)分析函數獲取組中的最後一個值,並且我還使用LISTAGG函數根據先前的結果生成列表。奇怪的是,在列表的末尾還有一個額外的分隔符。有誰知道爲什麼,或者這是Oracle中的一個錯誤?Oracle 1.2 ListAgg with keep(dense_rank)在列表中給出了額外的逗號

下面是一個簡化的示範:

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...)

回答

4

不要使用||自己連接逗號。您需要將其作爲參數傳遞給listagg

listagg(cust_id, ',') 
+0

這很簡單!咄!感謝斯坦 –