Я пытаюсь создать временную таблицу, которая будет распечатывать статистику звонков для моих сотрудников. Мне удалось создать довольно сложный набор запросов, подзапросов и переменных в операторе выбора, но я не могу придумать способ напечатать более 1 строки данных во «временной таблице».
В конечном итоге моя цель — экспортировать отчеты о звонках для моих сотрудников, поскольку они не интегрированы в наше программное обеспечение.
Я знаю, что эта проблема намного лучше решается на C# (или любом другом языке, если на то пошло), но моя цель состоит в том, чтобы закодировать запрос, чтобы неквалифицированный администратор мог изменить столбец «дата», а затем Workbench мог составить « отчет», который затем можно экспортировать в формате .csv. Пока я могу напечатать только 1 строку. Я пытаюсь выяснить, насколько это возможно для запроса MySQL или у меня есть больше места для печати дополнительных строк.
-- Set Employee Name and Date for Variables
SET @employee =
'Employee1'
-- 'Employee2'
-- 'Employee3'
-- 'Employee4'
-- 'Employee5'
, @inquirydate = '6/28/2019'
;
-- Count Total Calls (Valid/Invalid)
SET @totalCalls = (
SELECT COUNT(*)
FROM
callTrackingSoftware.log l
JOIN
callTrackingSoftware.dbase d ON l.filenumber = d.id
WHERE
l.logdate = @inquirydate
AND l.collectorname IN (@employee)
AND l.logmessage LIKE '%Called%');
-- Count Total (Valid Calls Only)
SET @totalValidCalls = (
SELECT COUNT(*)
FROM
callTrackingSoftware.log l
JOIN
callTrackingSoftware.dbase d ON l.filenumber = d.id
WHERE
l.logdate = @inquirydate
AND l.collectorname IN (@employee)
AND l.logmessage LIKE '%Called%'
AND l.logmessage NOT LIKE '%Disconnected%'
AND l.logmessage NOT LIKE '%VM Unavailable%'
AND l.logmessage NOT LIKE '%No Answer%');
-- Count Total Unique Accounts (Count Once per FileNumber)
SET @totalUniqueCalls = (
SELECT DISTINCT COUNT(d.filenumber)
FROM
callTrackingSoftware.log l
JOIN
callTrackingSoftware.dbase d ON l.filenumber = d.id
WHERE
l.logdate = @inquirydate
AND l.collectorname IN (@employee)
AND l.logmessage LIKE '%Called%'
AND l.logmessage NOT LIKE '%Disconnected%'
AND l.logmessage NOT LIKE '%VM Unavailable%'
AND l.logmessage NOT LIKE '%No Answer%');
-- Total Valid Calls
SET @totalValidCalls = (
SELECT COUNT(*)
FROM
callTrackingSoftware.log l
JOIN
callTrackingSoftware.dbase d ON l.filenumber = d.id
WHERE
l.logdate = @inquirydate
AND l.collectorname IN (@employee)
AND l.logmessage LIKE '%Called%'
AND l.logmessage NOT LIKE '%Disconnected%'
AND l.logmessage NOT LIKE '%VM Unavailable%'
AND l.logmessage NOT LIKE '%No Answer%');
-- FIRST CALL TIME
SET @firstCall = (
SELECT (l.logtime)
FROM
callTrackingSoftware.log l
JOIN
callTrackingSoftware.dbase d ON l.filenumber = d.id
WHERE
l.logdate = @inquirydate
AND l.collectorname IN (@employee)
AND l.logmessage LIKE '%Called%'
ORDER BY l.logdateandtime ASC
LIMIT 1);
-- LAST CALL TIME
SET @lastCall = (
SELECT (l.logtime)
FROM
callTrackingSoftware.log l
JOIN
callTrackingSoftware.dbase d ON l.filenumber = d.id
WHERE
l.logdate = @inquirydate
AND l.collectorname IN (@employee)
AND l.logmessage LIKE '%Called%'
ORDER BY l.logdateandtime DESC
LIMIT 1);
-- PRINT VARIABLES
select
@employee as 'Employee',
@inquirydate as 'Date',
@totalCalls as 'TotalCalls',
@totalValidCalls as 'TotalValidCalls',
@totalUniqueCalls as 'TotalUniqueAccounts',
@firstCall as 'FirstNotation',
@lastCall as 'LastNotation';
| Employee | Date | TotalCalls | TotalValidCalls | TotalUniqueCalls | FirstCall | LastCall |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
> 1 | Employee1 | 6/28/2019 | 133 | 64 | 64 | 11:17 AM | 2:38 PM |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
2 | Employee2 | 6/28/2019 | 135 | 50 | 50 | 11:00 AM | 2:00 PM |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
3 | Employee3 | 6/28/2019 | 200 | 60 | 60 | 11:50 AM | 3:00 PM |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
etc... (one for each employee listed above)
| Employee | Date | TotalCalls | TotalValidCalls | TotalUniqueCalls | FirstCall | LastCall |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
> 1 | Employee1 | 6/28/2019 | 133 | 64 | 64 | 11:17 AM | 2:38 PM |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
Это здорово, но чтобы получить нужные результаты, мне нужно закомментировать «Сотрудник1» и раскомментировать «Сотрудник2», каждый раз копируя и вставляя результаты в электронную таблицу. Я хотел бы печатать с циклом для каждого сотрудника, но я никогда не видел ничего подобного в MySQL за пределами языка более низкого уровня. Я даже не уверен, что это возможно.
-- IDEAL RESULTS:
| Employee | Date | TotalCalls | TotalValidCalls | TotalUniqueCalls | FirstCall | LastCall |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
> 1 | Employee1 | 6/28/2019 | 133 | 64 | 64 | 11:17 AM | 2:38 PM |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
2 | Employee2 | 6/28/2019 | 135 | 50 | 50 | 11:00 AM | 2:00 PM |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
3 | Employee3 | 6/28/2019 | 200 | 60 | 60 | 11:50 AM | 3:00 PM |
+--------------+---------------+----------------+-------------------+--------------------+-------------+------------+
-- etc... (one for each employee listed above)
show create table url_alias;
. Добавление этой информации (даже если вы подделываете имена таблиц) предоставит информацию, необходимую для создания одного запроса, который даст результаты, которые вы запрашиваете. Просто запустите этот оператор для каждой из 2 таблиц, измените имена таблиц, если хотите в результате, затем вставьте их в свой вопрос, а затем отметьте как код. - person Sloan Thrasher   schedule 01.07.2019