我如何 select 根据日期在数组中区分?

How can I select distinct inside an array based on date?

我想(明确地)显示来自我的数据库 (PostgreSQL) 的值 这是我的代码:

SELECT distinct t.*, round(SUM(percentage)OVER (order by agentname rows between unbounded preceding and current row),3) AS cumulative
FROM (
  SELECT 
    a.*,
    COUNT(*) AS frequency,
   round(COUNT(*) * 100.00 / SUM(COUNT(*)) OVER (),4) AS percentage
  FROM 
      (select agentname,inputdate, unnest(array[ WSalamPembuka,WKonfirmasiNamaCust, WVerifikasiData,WKemampuanBertanya,WProductKnowledge,WSolusi,WAlternativeSolusi,WSistemPelaporan,WEmpati,WResponsif,WRamahSopan,WPercayaDiri,WHoldCall,WOfferHelp,WPenutup]) as weakness                        
                from call )as a 
                  WHERE a.agentname like '%wendra%' and a.weakness is not null and a.weakness !='' and a.inputdate between '01/12/2015' and  '08/01/2016'
                  group by a.agentname,a.weakness,a.inputdate
                  order by frequency desc
                ) AS t
                ORDER BY frequency DESC 

        
 

我得到的结果是:

如您所见,我在这里得到了重复的数据。我希望它像:

有解决这个问题的技巧吗?

您得到重复项的原因是因为您按输入日期分组:

group by a.agentname,a.weakness,a.inputdate

只需从 group by 子句(以及外部 select 子句)中删除 inputdate,您就会得到想要的结果(通过注释掉 [来注意我的更改) =12=]):

SELECT distinct t.*, round(SUM(percentage)OVER (order by agentname rows between unbounded preceding and current row),3) AS cumulative
FROM (
  SELECT 
    a.*,
    COUNT(*) AS frequency,
   round(COUNT(*) * 100.00 / SUM(COUNT(*)) OVER (),4) AS percentage
  FROM 
      (select agentname,inputdate, unnest(array[ WSalamPembuka,WKonfirmasiNamaCust, WVerifikasiData,WKemampuanBertanya,WProductKnowledge,WSolusi,WAlternativeSolusi,WSistemPelaporan,WEmpati,WResponsif,WRamahSopan,WPercayaDiri,WHoldCall,WOfferHelp,WPenutup]) as weakness                        
                from call )as a 
                  WHERE a.agentname like '%wendra%' and a.weakness is not null and a.weakness !='' and a.inputdate between '01/12/2015' and  '08/01/2016'
                  group by a.agentname,a.weakness/*,a.inputdate*/
                  order by frequency desc
                ) AS t
                ORDER BY frequency DESC