У меня SQL-популяция - давайте называть их оповещениями.Каждое предупреждение среди различных других полей содержит тип предупреждения (сценарий) и аналитика, который обработал это предупреждение.Мы пытаемся сделать образец QA для различных бизнес-единиц, и у каждого из них свои требования.Большинство из них просты, но у нас есть один хитрый.Вот требования:
Мы должны выполнить выборку по следующим параметрам:
Закрытые оповещения для каждого сценария оповещения.Общая выборка должна быть не менее 60. Будет пропорционально распределена по объему сценария.
5 обзоров на аналитика или 100% на аналитика, в зависимости от того, что меньше.
Все аналитики должны быть в выборке, и каждый сценарий должен иметьпо крайней мере, один обзор.
Я хотел бы встроить все это в SQL, чтобы SQL мог вернуть мне образец.У нас есть «минимум 5 на аналитика или 100%, в зависимости от того, что меньше» от всей совокупности, однако нам нужно сначала получить стратифицированную выборку, но включить в этот процесс минимум 5 на аналитика.
Первым делом я хотел сделать стратифицированную выборку, поэтому для этого я определил, сколько нужно каждого сценария для удовлетворения этих требований, и поместил его в виде столбца в возвращенном наборе данных.
Вот вершина моего SQL:
SELECT D.*
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY SCENARIO_DESCRIPTION_NM ORDER BY ALERT_ID) AS SEQNUM,
COUNT(*) OVER () AS TOTAL_COUNT,
COUNT(*) OVER (PARTITION BY SCENARIO_DESCRIPTION_NM) AS SN_COUNT,
CEIL(SN_COUNT * (SN_COUNT * 1.0 / TOTAL_COUNT)) AS SAMPLE_SIZE
FROM
В конце запроса у меня есть:
WHERE SEQNUM < 500 * (SN_COUNT * 1.0 / TOTAL_COUNT)
Что это дает мне столбец в концеВозврат, который говорит мне размер выборки для каждого сценария:
Однако, это просто говорит мне, что мне нужно, я действительно хочу сделать запрос возврататолько стратифицированную выборку, НО она должна учитывать для каждого аналитика в популяции, представленной максимум 5 на 100%, в зависимости от того, что меньше (см. правило № 2 выше).Это похоже на объединение двух методов выборки, но я не уверен, как это реализовать.
Исходя из трех приведенных выше правил, как бы это сделать в SQL, чтобы вернуть этот образец в соответствие с этими правилами?Я предполагаю, что это будет несколько запросов для каждого, но затем выполнить своего рода JOIN, но не знаю, как подойти к этому.Заранее спасибо.