Объединение нескольких строк данных в одну строку для каждого идентификатора

#sql #group-by #netezza

#sql #группировка по #netezza

Вопрос:

У меня есть необработанные данные, которые имеют несколько дат для каждой категории, и я использую код case when category = 'referral' then min(date) end as date_referral для получения самых ранних дат каждой категории для каждого идентификатора.

Однако он не будет возвращать данные в строке, а создаст строку для каждой категории как таковую:

 id    date_entered      date_referral      date_reply        date_final
-------------------------------------------------------------------------
1      2020-12-20           null              null              null 
1      2020-12-20         2020-12-21          null              null 
1      2020-12-20           null            2020-12-21          null 
1      2020-12-20           null              null            2020-12-24
 

Я попытался применить отдельные строки с помощью distinct или group by (отдельно и вместе):

 select distinct id
, date_entered
, case when category = 'referral' then min(date) end as date_referral
, case when category = 'reply' then min(date) end as date_reply 
, case when category = 'final' then min(date) end as date_final

from data
group by id
, date_entered
, category
 

но он будет продолжать возвращать несколько строк, причем каждая строка вычисляется по самой ранней дате для каждой категории. Я также попытался создать cte после этого кода select distinct id, date_entered, date_referral, date_reply, date_final from table , но он также по-прежнему возвращает несколько строк..

Как я могу объединить эти строки и заставить их возвращать одну строку?

Ответ №1:

Вы не должны группировать по category .
Используйте условную агрегацию следующим образом:

 select id, date_entered,
       min(case when category = 'referral' then date end) as date_referral,
       min(case when category = 'reply' then date end) as date_reply, 
       min(case when category = 'final' then date end) as date_final
from data
group by id, date_entered