2017-07-07 129 views
2

我正在努力寻找一种很好的方法来做listagg中的DISTINCT红移。listagg与红移DISTINCT

我想要做的是列出产品的组合,但每行应返回不同产品的列表。

所需的输出:

bulb, light 
bulb, light, fan 

代替:

bulb, bulb, light 
bulb, bulb, light, fan 

下面是我的SQL:

select 
    tit.listagg 
from (
    SELECT 
     username, 
     listagg(node_name, ',') 
     WITHIN GROUP (ORDER BY node_name asc) 
    FROM table 
    Where node_type not like '%bla bla%' 
    GROUP BY username 
) as tit 
group by listagg; 
+0

现在,您可以在'listagg'内使用'DISTINCT'作为可选的子句。更多细节在这里:https://docs.aws.amazon.com/redshift/latest/dg/r_LISTAGG.html –

回答

5

你可以带umerate行,然后选择第一个:

select username, 
     listagg(case when seqnum = 1 then node_name end, ',') within group (order by node_name asc) 
from (select t.*, 
      row_number() over (partition by username, node_name order by node_name) as seqnum 
     from table t 
     where node_type not like '%bla bla%' 
    ) t 
group by username; 

它使用的功能,listagg()忽略NULL值。

+0

真正卓越的反应和迅速。得到它的工作。 :) –