Страница 1 из 1

Полезные запросы SQL

Добавлено: 27 апр 2016, 09:02
paver
(теперь есть соответствующая тема в hawtos: viewtopic.php?f=4&t=3911)

Ползая по просторам форума, наткнулся на просьбу:
viewtopic.php?f=5&t=2678
Помогите пожалуйста выгрузить статистику из OTRS по артиклям (а не по тикетам). Нужно получить отчёт о том сколько articles было обработано агентом за определённый период. В модуле статистики я могу получить данные только по изменениям произведёнными с тикетами, а вот сколько в этом тикете было articles - статистика не показывает.
Тоже стало интересно, набросал запросик:

Код: Выделить всё

SELECT users.last_name, count(article.create_by) FROM article LEFT JOIN users ON article.create_by = users.id GROUP BY article.create_by
В принципе полезно для анализа. Можно и период задать, как в исходной просьбе.

Или вот, например, получить Id тикетов с повышенной активностью (больше 5 артиклей на заявку):

Код: Выделить всё

SELECT count(ticket_id), ticket_id
 FROM article
 GROUP BY ticket_id
 HAVING count(ticket_id) > 5
Собственно, вопрос-предложение.
Если кто активно юзает эту фичу - может поделитесь в топике своими запросами, которые полезны для вас (и регулярно используете)? Может и другим пригодится.

Потом тему можно будет и в Howtos перенести.

Re: Полезные запросы SQL

Добавлено: 27 апр 2016, 14:27
Alex Pelikh
Забыли вырубить из выборки системного пользователя Admin OTRS
И лучше выбирать Имя и Фамилию, иначе риск - Однофамильцы, и непонятно будет кто есть кто
Либо разными полями, либо так:

Код: Выделить всё

SELECT concat(users.last_name, ' ', users.first_name) as agent_fullname,  count(article.create_by) FROM article LEFT JOIN users ON article.create_by = users.id where users.id != 1 GROUP BY article.create_by
Но выбирать отчетные данные прямыми выборками из продуктивной базы на постоянной основе - плохая затея, особенно на большой базе.
Заведите slave реплику и тащите с нее данные внешней отчетной системой.
Она и период позволит выбрать, и всё что угодно, в зависимости от ваших хотелок и возможностей человека, который будет делать шаблоны отчетов.

Re: Полезные запросы SQL

Добавлено: 28 апр 2016, 14:32
paver
Alex Pelikh писал(а):Но выбирать отчетные данные прямыми выборками из продуктивной базы на постоянной основе - плохая затея, особенно на большой базе.
Я не про регулярные отчеты, а про инструмент админа. Надо что-то быстро посмотреть, что стандартными средствами не делается.

Со вторым отчетом чайниканул, канешна ( . Исправил

Re: Полезные запросы SQL

Добавлено: 03 июн 2016, 13:08
paver
Тут возник вопрос к знатокам SQL.
Захотелось получить статистику одновременно по открытым и закрытым заявкам в разрезе дней.
Получилось такое:

Код: Выделить всё

SELECT a.date, b.created, c.closed
  FROM (
    SELECT DATE_FORMAT(create_time,'%Y-%m-%d') as date
    FROM ticket_history
    WHERE create_time > CURRENT_DATE - INTERVAL 30 DAY
    GROUP BY date
  ) as a
  LEFT JOIN (
    SELECT DATE_FORMAT(create_time,'%Y-%m-%d') as date, count(*) as created
    FROM ticket_history
    WHERE history_type_id = 1 AND create_time > CURRENT_DATE - INTERVAL 30 DAY
    GROUP BY date
  ) as b USING (date)
  LEFT JOIN (
    SELECT DATE_FORMAT(create_time,'%Y-%m-%d') as date, count(*) as closed
    FROM ticket_history
     WHERE history_type_id IN (1, 27) AND state_id IN (2, 3) AND create_time > CURRENT_DATE - INTERVAL 30 DAY
    GROUP BY date
  ) as c USING (date)
Нельзя ли посимпатичнее его изобразить, выглядит как-то неоптимизировано?
В постгресе общую часть из этих трех запросов можно было бы через CTE попробовать оформить (+ избавиться от внешнего оберточного селекта), но у нас мускуль (

Re: Полезные запросы SQL

Добавлено: 09 июн 2016, 06:04
paver
paver писал(а):Нельзя ли посимпатичнее его изобразить, выглядит как-то неоптимизировано? (
Сам себе отвечу:

Код: Выделить всё

SELECT date,
  SUM(history_type_id = 1) AS created,
  SUM(history_type_id IN (1, 27) AND state_id IN (2, 3)) AS closed
FROM (
  SELECT DISTINCT history_type_id, ticket_id, state_id, LEFT(create_time, 10) AS date
  FROM ticket_history
  WHERE history_type_id IN (1, 27) AND create_time > CURRENT_DATE - INTERVAL 30 DAY) AS a
GROUP BY date

Re: Полезные запросы SQL

Добавлено: 19 окт 2016, 08:51
goro
Коллеги, а есть ли у кого запрос чтоб получить статистику из определенной очереди?

Re: Полезные запросы SQL

Добавлено: 19 окт 2016, 11:08
bloodice
Может кому то и понятно какая статистика Вам нужно, но очень сильно сомневаюсь.

Re: Полезные запросы SQL

Добавлено: 19 окт 2016, 11:14
goro
нужны такие данные поступления тикета, в какую подочередь. Точнее поля дата создания, дата закрытия, подочередь, ответственный.

Re: Полезные запросы SQL

Добавлено: 20 окт 2016, 01:22
alexus
Есть таблица ticket_history. Там в ней всё достаточно прозрачно ;)

Re: Полезные запросы SQL

Добавлено: 27 окт 2016, 17:58
goro
А какое поле отвечает за дату закрытия тикета?

Re: Полезные запросы SQL

Добавлено: 28 окт 2016, 07:10
paver
goro писал(а):А какое поле отвечает за дату закрытия тикета?
Если вопрос по ticket_history, то искать запись с
history_type_id IN (1, 27) AND state_id IN (2, 3)
т.е. смена состояния на закрытую + или -
Поля create_time или change_time (они эквивалентны)

Re: Полезные запросы SQL

Добавлено: 28 окт 2016, 11:13
goro
А дата создания, дата закрытия, подочередь, ответственный?

Re: Полезные запросы SQL

Добавлено: 28 окт 2016, 11:39
alexus
goro писал(а):А дата создания, дата закрытия, подочередь, ответственный?
Посмотрите на Историю тикета, посмотрите на таблицу, проанализируйте соответствие, подумайте, как правильно делать запросы.

Re: Полезные запросы SQL

Добавлено: 01 ноя 2016, 19:09
goro
подскажите в какой таблице статус тикета найти?
в текет, тикет хистори не нашел...

Re: Полезные запросы SQL

Добавлено: 01 ноя 2016, 19:17
alexus
https://github.com/OTRS/otrs/blob/maste ... .mysql.sql
1. CREATE TABLE ticket & CREATE TABLE ticket_history -> state_id
2. CREATE TABLE ticket_state -> id

Re: Полезные запросы SQL

Добавлено: 02 ноя 2016, 06:37
paver
goro писал(а):подскажите в какой таблице статус тикета найти?
в текет, тикет хистори не нашел...
А можно узнать, как искал?

Re: Полезные запросы SQL

Добавлено: 02 ноя 2016, 10:43
svdvovan
Запрос "закрыто заявок за 9часов"

Код: Выделить всё

SELECT count(*) FROM ticket WHERE ticket_state_id IN (2)  AND queue_id IN (1,2,4,5) AND DATE(change_time) >= DATE_SUB(CURRENT_DATE, INTERVAL 9 HOUR)
Запрос "создано заявок за 9часов"

Код: Выделить всё

SELECT count(*) FROM ticket WHERE ticket_state_id   AND queue_id IN (1,2,4,5) AND DATE(create_time) >= DATE_SUB(CURRENT_DATE, INTERVAL 9 HOUR)
Я в Zabbix вывожу эти запросы в виде графиков...

Re: Полезные запросы SQL

Добавлено: 02 ноя 2016, 11:25
goro
alexus писал(а):https://github.com/OTRS/otrs/blob/maste ... .mysql.sql
1. CREATE TABLE ticket & CREATE TABLE ticket_history -> state_id
2. CREATE TABLE ticket_state -> id

state_id - число, как его интерпритировать в название статуса?

Re: Полезные запросы SQL

Добавлено: 02 ноя 2016, 11:35
mukexa
goro писал(а): state_id - число, как его интерпритировать в название статуса?
ticket_state_type?

Re: Полезные запросы SQL

Добавлено: 02 ноя 2016, 17:48
alexus
goro писал(а):state_id - число, как его интерпритировать в название статуса?
Select * сделайте по таблицам - там всё же видно. Хотя если Вы такие вопросы задаёте, то скорее всего Вам потребуется помощь специалиста по SQL.

Re: Полезные запросы SQL

Добавлено: 03 ноя 2016, 06:52
bloodice
svdvovan писал(а):Запрос "закрыто заявок за 9часов"

Код: Выделить всё

SELECT count(*) FROM ticket WHERE ticket_state_id IN (2)  AND queue_id IN (1,2,4,5) AND DATE(change_time) >= DATE_SUB(CURRENT_DATE, INTERVAL 9 HOUR)
Ну сделаю я какую нибудь заметку (или что либо другое что обновляет change_time) у закрытого уже полгода тикета и Ваш замечательный запрос сосчитает его.

Re: Полезные запросы SQL

Добавлено: 03 ноя 2016, 07:52
paver
bloodice писал(а):
svdvovan писал(а):Ну сделаю я какую нибудь заметку (или что либо другое что обновляет change_time) у закрытого уже полгода тикета и Ваш замечательный запрос сосчитает его.
Совершенно справедливо. Раньше сам считал тикеты, но через хистори надежнее в общем.

2svdvovan
Тут есть примеры
http://otrs.ru/forum/viewtopic.php?f=4&t=3911

Re: Полезные запросы SQL

Добавлено: 03 ноя 2016, 09:47
svdvovan
paver писал(а):2svdvovan
Тут есть примеры
viewtopic.php?f=4&t=3911
отличные примеры! - утащил себе парочку 8-)

Re: Полезные запросы SQL

Добавлено: 25 янв 2017, 18:17
goro
У кого есть запрос на получение кол-ва заявок в очереди?
В какой таблице искать? В таблице Queue не нашел...

т.е. как сюда добавить еще и кол-во заявок в каждой очереди?
SELECT
queue.id,
queue.`name`
FROM
queue

Re: Полезные запросы SQL

Добавлено: 25 янв 2017, 19:05
alexus