Назначение значения столбца на основе условия для другого столбца в sql (тераданные) - PullRequest
0 голосов
/ 09 июля 2020

У меня есть таблица со следующими столбцами: Date, AcctId, CustID, BackupID, Logins, Amount. Для заданной даты AcctID может иметь более одного CustIDs, но я хочу назначить единственное число CustID на AcctID на основе значения Logins.

т.е. :

Если Cust1 имеет больше Logins, чем Cust2 для данной даты и AcctID, то CustID должно иметь Cust1 в качестве значения.

Если Cust1 logins = Cust2 logins, то CustID должно иметь значение BackupID.

Затем я хочу добавить Amount для заданных Date, AcctID.

Кто-нибудь может помочь с logi c? Я попробовал присоединиться к себе, но, вероятно, подумал, что это неправильно.

1 Ответ

0 голосов
/ 09 июля 2020

Вы можете реализовать свои правила, используя агрегатные и оконные функции:

select acctid, date,
       (case when count(*) = 1 then min(custid)
             else min(backupid)
        end) as imputed_customer
from (select acctid, date, min(backupid) as backupid, custid,
             count(*) as cnt,
             rank() over (partition by acctid, date order by count(*) desc) as seqnum
      from t
      group by acctid, date
     ) ad
where seqnum = 1
group by acctid, date;

Подзапрос агрегирует данные по acctid, date и custid. Он также ранжирует custids для данной комбинации acct / date.

Затем внешний запрос говорит:

  • Если есть только один максимум custid, используйте это.
  • В противном случае используйте backupid.

Обратите внимание, что если в данной комбинации acctid / date есть несколько backupid, то используется произвольная.

...