Я работаю над SMS-шлюзом, который содержит несколько платных SMS-услуг с разными номерами,
каждое SMS, отправленное клиенту, имеет 4 статуса, как показано ниже ( перенаправлено, доставлено, срок действия истек, доставка не удалась )
Теперь у меня есть первая_таблица для системы зарядки с приведенными ниже деталями ( ТАБЛИЦА-A )
и ниже ( ТАБЛИЦА-B ), которые содержат статус каждого отправленного SMS с его идентификатором
Ниже мой ожидаемый окончательный результат, чтобы спрогнозировать детали для каждой sms-службы:
Сначала я подумал это было легко, все, что мне нужно, это просто использовать COUNT(Case when ...)
, но в моем случае у меня есть тысячи SMS-номеров (услуг), поэтому, если я воспользуюсь этим подходом, это будет так: -
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='forwarded' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='delivered' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='expired' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='delivery failed' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='forwarded' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='delivered' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='expired' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='delivery failed' )
...
...
...
...
...
...
...
Вышеупомянутый подход непрактичен, если у вас много сервисов, при этом отмечая, что CASE
может обрабатывать только 250 условий?
Итак, какой подход является наилучшим? o сделать left outer join
для (Таблица A) на (Таблица B) с использованием идентификатора SMS и подсчитать каждый SMS-статус и спрогнозировать его, как показано ниже?