У меня есть несколько таблиц, называемых когортами, типами, этапами, координатами cohort_eval. Когортная таблица - это список команд или групп. Таблица типов - это список типов оценок, которые могут быть назначены когорте. В таблице типов есть только 2 типа. Таблица этапов - это список этапов внутри типа (предположим, что существует 3 этапа, но можно добавить больше). Например, Тип 1 может иметь stage1, stage2, stage3 ... и т. Д. Cohort_eval_tracker - это таблица, в которой отслеживаются оценки, которым была назначена когорта. Когортам может быть назначен только этап только после завершения предыдущего этапа. Например, если 1-й этап 1-го этапа закончился 1-го января, то когорта может быть назначена для 2-го этапа 2-го этапа 2-го января. Одновременно может быть назначена когорта. Поэтому, если кому-то назначается ступень 1 первого уровня, они также могут принимать 2-й этап 2 в то же самое время, пока первый этап 1-го этапа заканчивается до начала второго этапа 2-го этапа.Создание инструкции SELECT
Я хочу создать инструкцию SELECT, которая возвращает когорты, которым все еще могут быть присвоены оценки до максимальной стадии. Поэтому, если когорта не сделала каких-либо оценок, я хочу, чтобы они были возвращены, или если когорта не была назначена на последнем этапе (для этого примера это этап 3, но больше можно добавить в будущем), тогда я хочу, чтобы эта когорта для возврата. Моя попытка ниже не является правильным, поскольку он возвращается когорту 1 несмотря на то, что они завершили все 3 этапа в обоих тип 1 и тип 2.
SELECT
cohortID, cohortName
FROM
dbo.cohort
WHERE
cohortID NOT IN (SELECT cohortID
FROM cohort_eval_tracker
WHERE stageID = (SELECT MAX(stageID) FROM stage)
AND endDate < GETDATE())
OR
cohortID NOT IN (SELECT cohortID
FROM cohort_eval_tracker
WHERE stageID = 2 AND (typeID = 1 OR typeID = 2))
Cohort_eval_tracker:
╔══════════════╦══════════╦════════╦═════════╦═══════════╦═══════════╗
║ cohortEvalID ║ cohortID ║ typeID ║ stageID ║ startDate ║ endDate ║
╠══════════════╬══════════╬════════╬═════════╬═══════════╬═══════════╣
║ 1 ║ 1 ║ 1 ║ 1 ║ 1/10/2015 ║ 1/11/2015 ║
║ 2 ║ 1 ║ 1 ║ 2 ║ 1/12/2015 ║ 1/22/2015 ║
║ 3 ║ 1 ║ 1 ║ 3 ║ 1/30/2015 ║ 2/1/2015 ║
║ 4 ║ 1 ║ 2 ║ 1 ║ 1/2/2015 ║ 1/3/2015 ║
║ 5 ║ 1 ║ 2 ║ 2 ║ 1/4/2015 ║ 1/5/2015 ║
║ 6 ║ 1 ║ 2 ║ 3 ║ 1/6/2015 ║ 1/7/2015 ║
║ 6 ║ 2 ║ 1 ║ 2 ║ 3/10/2016 ║ 3/16/2016 ║
╚══════════════╩══════════╩════════╩═════════╩═══════════╩═══════════╝
Этап:
╔═════════╦═══════════╗
║ stageID ║ stageName ║
╠═════════╬═══════════╣
║ 1 ║ stage1 ║
║ 2 ║ stage2 ║
║ 3 ║ stage3 ║
╚═════════╩═══════════╝
Когорта:
╔══════════╦════════════╗
║ cohortID ║ cohortName ║
╠══════════╬════════════╣
║ 1 ║ cohort1 ║
║ 2 ║ cohort2 ║
╚══════════╩════════════╝
Тип:
╔════════╦══════════╗
║ typeID ║ typeName ║
╠════════╬══════════╣
║ 1 ║ type1 ║
║ 2 ║ type2 ║
╚════════╩══════════╝
Что случилось с вашей попыткой? Ошибка? неверные данные возвращены? Можете ли вы опубликовать образец ожидаемого результата – Matt
[Что вы пробовали?] (Http://mattgemmell.com/what-have-you-tried/) – Pred
Так что для этого случая это должно быть только ** cohort2 **, которое должно быть возвращены, так как они не завершили все свои этапы ни в одном типе, ни в типе 2. – mediumM