Попытка упростить запрос одной таблицы - PullRequest
0 голосов
/ 24 марта 2020

У меня есть таблица из SQLAnywhere (Netbackup), которую я пытаюсь запросить способом, который поможет сценарию оболочки решить, требуется ли повторный запуск, если нет. Netbackup, естественно, попытается перезапустить задание, поэтому вполне возможно, что задание может несколько раз потерпеть неудачу, а затем будет успешно выполнено позже в 12-часовом окне. Я звоню по номеру domain_job, и я пытаюсь запросить определенный код состояния c (4275) в течение 12 часов, при условии, что в коде состояния 3 счетчика, а в коде возврата 0 12 часовое окно. Мне нужно, чтобы перечислить этот вывод, чтобы скрипт мог его запустить. Я пробовал вложенный выбор, но счет кажется неправильным.

Этот выбор возвращает данные, но я не могу понять, как наилучшим образом вставить счетчик кода состояния, чтобы удостовериться, что 3 резервные копии не были выполнены после 0, и показать самый последний идентификатор задания, чтобы его можно было повторно выполнить скрипт оболочки. Также не уверен, что счетчик возвращается правильно.

SELECT a.clientName, a.job_count, MAX(id)
FROM (SELECT clientName, COUNT(statusCode) AS job_count
FROM domain_job
 where statusCode = 4275
  AND type = 28
  AND (policyName LIKE '%vip%' OR policyName LIKE '%VIP%')
  AND datediff(HOUR, UTCBigIntToNOMTime(endTime), getdate()) < 12
GROUP BY clientName
ORDER BY clientName, job_count DESC ) a, domain_job b
 where a.clientName=b.clientName
  AND b.statusCode = 4275
  AND b.type = 28
  AND (b.policyName LIKE '%vip%' OR b.policyName LIKE '%VIP%')
  AND datediff(HOUR, UTCBigIntToNOMTime(b.endTime), getdate()) < 12
GROUP BY client_name 

Этот выбор работает, но его кажется запутанным.

SELECT COUNT(*) AS "Failures",
       d.clientName AS "Client"
FROM domain_Job d
WHERE clientName IN (
    SELECT clientName
    FROM domain_Job c
    WHERE c.id IN (
        -- Get the Max Job ID with out filtering for Status Code.
        -- This will then be used to get the final result of backups
        -- We will see if backups have reran successfully or not.
        SELECT MAX(b.id)
        FROM domain_job b
        WHERE b.clientName IN (
            -- Get the initial client names of backups that have failed in
            -- XX hours ago with 4275, this is the seed.
            SELECT a.clientName
            FROM domain_job a
            WHERE a.statusCode = 4275
              AND a.type = 28
              AND (a.policyName LIKE '%vip%' OR a.policyName LIKE '%VIP%')
              AND datediff(HOUR, UTCBigIntToNOMTime(a.endTime), getdate()) < 12
            GROUP BY a.clientName
            )
          AND b.type = 28
          AND (b.policyName LIKE '%vip%' OR b.policyName LIKE '%VIP%')
          AND datediff(HOUR, UTCBigIntToNOMTime(b.endTime), getdate()) < 12
        GROUP BY b.clientName
        )
      AND c.statusCode = 4275
      AND c.type = 28
      AND (c.policyName LIKE '%vip%' OR c.policyName LIKE '%VIP%')
      AND datediff(HOUR , UTCBigIntToNOMTime(c.endTime), getdate()) < 12
    )
  AND datediff(HOUR , UTCBigIntToNOMTime(d.endTime), getdate()) < 12
GROUP BY "Client"  ```


1 Ответ

0 голосов
/ 24 марта 2020

Попробуйте удалить «ORDER BY clientName, job_count DES C» из запроса a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...