Сравните 2 поля MySQL - PullRequest
0 голосов
/ 27 июня 2011

Я пытаюсь заставить скрипт PHP работать на основе API, который использует наша система поддержки, но я не достаточно разбираюсь в MySQL, чтобы понять это.

Мне нужно разобраться и найтивсе записи, которые имеют значение "action" "New Support Ticket Opened", возьмите "tid" и найдите соответствующую запись, которая имеет действие "New Ticket Response made by XXX", где XXX - это что угодно, кроме "User".Проблема, с которой я сталкиваюсь, заключается в том, что на самом деле может быть несколько записей, которые соответствуют этому описанию, но я хочу найти только первую.

Идея состоит в том, что я хочу отобразить график, который суммирует среднее времясначала требуется ответить на запрос в службу поддержки.

enter image description here

Вот начало SQL ...

SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
FROM billing b1 inner join billing b2 
ON b1.tid = b2.tid
WHERE b1.action='New Support Ticket Opened'
AND b2.action LIKE 'New Ticket Response made by%'
GROUP BY Tid

Любая помощь была бы фантастической!Спасибо.

Ответы [ 3 ]

0 голосов
/ 27 июня 2011
SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
FROM billing b1 inner join billing b2 
ON b1.tid = b2.tid
WHERE b1.action='New Support Ticket Opened'
AND b2.action LIKE 'New Ticket Response made by%'
AND b2.action != 'New Ticket Response made by User' //to filter "New Ticket Response made by User"
GROUP BY Tid
LIMIT 1
0 голосов
/ 27 июня 2011

возьмите "tid" и найдите соответствующую запись, которая имеет действие "New Ticket Response by XXX", где XXX - это что угодно, кроме "User"

Simples:

SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
FROM billing b1 INNER join billing b2 
  ON b1.tid = b2.tid
WHERE b1.action='New Support Ticket Opened'
AND b2.action LIKE 'New Ticket Response made by%'
AND b2.action <> 'New Ticket Response made by User'
GROUP BY Tid

И если вы хотите найти фактического пользователя .....

SELECT SUBSTR(b2.action, LENGTH('New Ticket Response made by ')) AS user,
  b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
....

(поскольку LENGTH («Новый ответ на запрос от тикета») постоянен, вы получите лучшую производительность, заменив его буквенным целым числом)

0 голосов
/ 27 июня 2011

Вы должны использовать предложение LIMIT:

SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
FROM billing b1 inner join billing b2 
ON b1.tid = b2.tid
WHERE b1.action='New Support Ticket Opened'
AND b2.action LIKE 'New Ticket Response made by%'
AND b2.action != 'New Ticket Response made by User'
GROUP BY Tid
LIMIT 1
...