У меня есть таблица из 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" ```