Создание суммы / общего количества строк пользователем в запросе sql для отчета csv / excel

0

Следующий запрос извлекает данные для формирования "отчета", но в основном это строки позиций, сгруппированных агентом CSR. То, что он делает, является точной и правильной, и после запроса я сохраняю результаты как CSV. Тем не менее, это дает мне только отдельные записи, поэтому я должен поместить его в excel и использовать формулы, чтобы вставить строку "Totals", которая в основном суммирует столбцы, которые мне нужно суммировать.

Этот sql-запрос выполняется в php-скрипте, но я не уверен, что лучший способ изменить его, чтобы я мог собрать эти столбцы для каждого пользователя. Было бы как-то сказать: "Это конец записей для пользователя 7200, поэтому вставьте строку итогов для пользователя 7200, а затем перейдите к записям для пользователя 7206" или что-то в этом роде.

Снимок экрана показывает отчет как есть, используя "x" и пустые пробелы вместо 1 или 0, поэтому в моих формулах excel у меня есть переменная count "x". Я надеюсь, что смогу сделать что-то подобное с этим скриптом. Ниже приведены запрос и скриншот.

Вот скрипка: http://sqlfiddle.com/#!9/b6a568/1

Результатом скрипта является вывод точного запроса, единственное отличие заключается в том, что скрипт помещает его в csv.

Я просто надеюсь, что у вас есть способ создать строку "Totals" для каждого пользователя, которая добавит количество "x" и количество секунд для продолжительности и времени удержания.

Любые предложения о том, как я могу реорганизовать это, очень ценятся.

$result = mysqli_query($conn2,
    "SELECT
          FirstN
          , LastN
        , Extension
        , Recieved
        , Recieved_Known
        , Outbound
        , Outbound_Known
        , Missed_No_VM
        , Missed_VM
        , Missed_Known
        , Calling_Number
        , Called_Number
        , Start_Time
        , End_Time
        , Talk_Time_Seconds
        , Hold_Time_Seconds

        FROM (
          SELECT distinct
           firstn
           , lastn
           , c.extension
           , CASE WHEN LEGTYPE1 = 2 AND ANSWERED = 1 THEN 'x' ELSE '' END AS Recieved
           , case when LEGTYPE1 = 2 and answered = 1 and CALLINGPARTYNO = k.phone_number then 'x' ELSE '' end as Recieved_Known
           , CASE WHEN LEGTYPE1 = 1 then 'x' ELSE '' end  AS Outbound
           , case when  FINALLYCALLEDPARTYNO = kn.long_number then 'x' ELSE '' end as Outbound_Known
           , case when legtype1 = 2 and answered = 0 and finallycalledpartyno  not like '%oice%' then 'x' ELSE '' end as Missed_No_VM
           , case when finallycalledpartyno like '%oice%' then 'x' ELSE '' end as Missed_VM
           , case when legtype1 = 2 and ANSWERED = 0 and CALLINGPARTYNO = k.phone_number then 'x' ELSE '' end as
            Missed_Known
           , a.CALLINGPARTYNO AS Calling_Number
           , a.FINALLYCALLEDPARTYNO AS Called_Number
           , b.starttime as Start_Time
           , b.endtime as End_Time
           , b.duration as Talk_Time_Seconds
           , a.holdtimesecs as Hold_Time_Seconds

          FROM ambition.session a
            INNER JOIN ambition.callsummary b ON a.NOTABLECALLID = b.NOTABLECALLID
            right join jackson_id.users c on a.callingpartyno = c.extension or a.finallycalledpartyno = c.extension
            LEFT JOIN ambition.known_numbers k ON a.callingpartyno = k.phone_number
        left join ambition.known_numbers kn on a.finallycalledpartyno = kn.long_number
                WHERE a.ts >= '2017-12-07' -- curdate()
                and(a.CALLINGPARTYNO in (select extension from ambition.ambition_users) OR a.finallycalledpartyno IN (select extension from ambition.ambition_users))
          ) x
          order by extension;") or die(mysqli_error( $conn2));

Скриншот для хорошей оценки:

Изображение 174551

Теги:
csv
excel

1 ответ

1
Лучший ответ

Я не уверен, как вы однозначно идентифицируете пользователя. Я предполагаю, что расширение является уникальным для каждого пользователя. Исходя из этого, я пришел к следующему запросу:

SELECT
          Extension
        , Recieved
        , Recieved_Known
        , Outbound
        , Outbound_Known
        , Missed_No_VM
        , Missed_VM
        , Missed_Known
        , Talk_Time_Seconds
        , Hold_Time_Seconds

      FROM (
          SELECT distinct
           c.extension
           , sum(CASE WHEN LEGTYPE1 = 2 AND ANSWERED = 1 THEN 1 ELSE 0 END) AS Recieved
           , sum(case when LEGTYPE1 = 2 and answered = 1 and CALLINGPARTYNO = k.phone_number then 1 ELSE 0 end) as Recieved_Known
           , sum(CASE WHEN LEGTYPE1 = 1 then 1 ELSE 0 end)  AS Outbound
           , sum(case when  FINALLYCALLEDPARTYNO = kn.long_number then 1 ELSE 0 end) as Outbound_Known
           , sum(case when legtype1 = 2 and answered = 0 and finallycalledpartyno  not like '%oice%' then 1 ELSE 0 end) as Missed_No_VM
           , sum(case when finallycalledpartyno like '%oice%' then 1 ELSE 0 end) as Missed_VM
           , sum(case when legtype1 = 2 and ANSWERED = 0 and CALLINGPARTYNO = k.phone_number then 1 ELSE 0 end) as
            Missed_Known
           , sum(b.duration) as Talk_Time_Seconds
           , sum(a.holdtimesecs) as Hold_Time_Seconds

          FROM session a
        INNER JOIN callsummary b ON a.NOTABLECALLID = b.NOTABLECALLID
        right join users c on a.callingpartyno = c.extension or a.finallycalledpartyno = c.extension
        LEFT JOIN known_numbers k ON a.callingpartyno = k.phone_number
        left join known_numbers kn on a.finallycalledpartyno = kn.long_number
          WHERE a.ts >= '2017-12-07' -- curdate()
          and(a.CALLINGPARTYNO in (select extension from ambition_users) OR a.finallycalledpartyno IN (select extension from ambition_users))
        group by c.extension    
      ) x

          order by extension;

Вышеуказанный запрос, по крайней мере, даст вам некоторое представление о том, как решить проблему.

  • 0
    Хорошо, я вижу, что это даст мне итоги отдельно. Знаете ли вы, есть ли способ для меня, чтобы вставить их вместе с отдельными записями? Например, есть ли отдельные записи для пользователя, а затем эта строка? Или, если ничего другого, я мог бы как-то вставить оба в один CSV
  • 0
    Подумав об этом больше, я надеюсь, что смогу использовать цикл foreach вокруг отдельных записей и вставить итоги на основе идентификатора пользователя. Я просто добираюсь сюда, но мне придётся поиграть с этим ещё немного, наверное.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню