Просроченные заявки в SQL: почему открытые тикеты нельзя выбрасывать из SLA
Среднее время закрытия выглядит отличным, хотя в очереди неделями висят нерешённые заявки. Отчёт только по закрытым тикетам не показывает текущий просроченный хвост. Для контроля срока нужны завершённые и ещё открытые обращения.
Как разобрать ситуацию
Выберите момент среза и целевой лимит. Для закрытого тикета сравниваем deadline с временем закрытия, для открытого — с моментом среза. В статье метрика отвечает на вопрос о нарушении установленного срока, а не об обычном среднем времени решения. Приостановки по ожиданию клиента должны учитываться отдельно, если они предусмотрены контрактом.
Пример и ожидаемый результат
Первый тикет имеет срок до 2 октября и всё ещё открыт на 4 октября. Второй закрыли 3 октября при том же сроке. Третий имеет срок 5 октября. Просрочены первые два; будущий срок третьего не является нарушением.
WITH tickets(id,deadline,closed_at) AS(VALUES(1,'2026-10-02',NULL),(2,'2026-10-02','2026-10-03'),(3,'2026-10-05',NULL))
SELECT id
FROM tickets
WHERE COALESCE(closed_at,'2026-10-04')>deadline
ORDER BY id;Запрос возвращает тикеты 1 и 2. Открытая просрочка остаётся видимой, хотя у неё ещё нет значения closed_at.
Проверка перед применением
- Проверьте закрытие ровно в deadline и зафиксируйте включительность границы.
- Исключите отменённые обращения только по согласованному правилу, а не ради улучшения процента.
- Разведите календарный и рабочий срок: выходные могут менять результат.
На дашборде покажите отдельно количество нарушений, возраст самого старого открытого тикета и распределение по ответственным очередям. Одного процента недостаточно: при большом притоке свежих обращений доля просрочек может уменьшиться, даже если давние нерешённые заявки продолжают ждать без движения.
Границы решения
Даты здесь нормализованы и не содержат часовых поясов. Для почасовых SLA нужны полные временные отметки и календарь обслуживания. Сам запрос не определяет, кто виноват в нарушении и какие санкции применимы.
Если запросы уже пишутся, а уверенности в кардинальности, оконных рамках и проверке результата не хватает, продолжить практику можно в нашем платном курсе
Продвинутый SQL: сложные запросы и задачи для собеседований. Перед записью сравните программу со своей задачей и подготовкой.
Техническая справка: www.sqlite.org: документация, www.sqlite.org: документация.
Следующий шаг: Сложные SQL-запросы: разборы расчётов и ошибок. По смежным вопросам: Воронка в SQL: почему наличие трёх событий ещё не означает прохождение, Поздние события в SQL: почему вчерашний отчёт меняется сегодня.
