2013-04-15 3 views
-1

У меня есть таблица со стартовыми и конечными датами учебных курсов для кандидатов, и вам нужно перемещаться по таблице, проверяя, что дата окончания предыдущей записи кандидатов не предшествует дате начала их текущей записи.Перемещение по столам

Другими словами, мне нужно проверить, что записи для подготовки кандидатов не пересекаются, и если они мне нужны, я могу отправить плохие записи в другую таблицу.

Я добавил здесь пример, где все даты являются неправильными, поскольку все даты окончания после следующей даты начала записи.

Я пробовал в то время как циклы и курсоры, но я не вижу способа сохранить значение из одной записи, переходя к следующему, чтобы сравнить его. спасибо.

PERS_ID PERS_TYPE_SD PERS_TYPE_ED 
6444 2006-08-01 00:00:00.000 2018-07-29 00:00:00.000 
6444 2009-08-01 00:00:00.000 2012-07-31 00:00:00.000 
6444 2007-08-01 00:00:00.000 2009-07-31 00:00:00.000 

ответ

1
select t1.*, t2.* 
from table as t1 
join table as t2 
    on t2.PERS_TYPE_SD > t1.PERS_TYPE_SD 
and t2.PERS_TYPE_SD < t1.PERS_TYPE_ED 
and t1.PERS_ID < t2.PERS_ID 
order by t1.PERS_ID, t2.PERS_ID 
+1

@JulesII: Обратите внимание на использование автообъединение в растворе выше, вместо курсора. Понимание таких методов, как это, является основной концепцией в понимании того, как использовать истинную силу SQL. Если вы хотите по-настоящему стать компетентным в SQL, изгоните все мысли о курсорах и «перемещайтесь по столам» из своего словаря и даже ваших мечтаний и кошмаров. –

+0

@PieterGeerkens Обратите внимание на протокол SO и +1 ответ, который вы уважаете. Действительно, если единственная цель вашего комментария состояла в том, чтобы предупредить OP, тогда прокомментируйте вопрос, а не ответ. – Paparazzi

+1

Ваш ответ полезен, поэтому я его поднял; благодарю вас за то, что вы заметили мой неосторожный надзор. Однако цель моего комментария состояла в том, чтобы расширить ваш ответ, чтобы помочь OP продвигаться в знаниях SQL. Правильно или неправильно я не чувствовал себя комфортно, делая такое дополнение к вашему ответу как редактирование. Если вы найдете какую-либо часть моего комментария ценной, не стесняйтесь включать ее в себя или нет. –

Смежные вопросы