У меня есть 2 таблицы. для этого примера я буду использовать только одну запись пользователя.
Первая таблица содержит имя пользователя и дату оценки как таковую:
USER EVALDATE
--------------
bobr 6/7/2010
bobr 9/20/2010
bobr 9/21/2010
Приведенную выше таблицу необходимо объединить с этой таблицей истории пользователей, в которой есть история идентификаторов и даты, когда они были действительными, чтобы найти совпадение (дата NULL означает текущую):
USER STARTDATE ENDDATE
----------------------------
bobr 2/20/2006 4/18/2010
bobr2 4/19/2010 9/7/2010
bobr 9/8/2010 null
То, что я пытаюсь сделать в SQL Server 2005, это взять первую запись из первой таблицы, перебрать ее через вторую таблицу, и когда (если) EVALDATE находится в одном из этих диапазонов дат, и идентификаторы совпадают, затем пометить эту запись из первой таблицы как действительную.
Текущий код берет запись из первой таблицы и работает со всеми строками второй таблицы и выбирает запись для каждого недействительного evaldate, поэтому он выбирает запись при объединении со второй таблицей, потому что evaldate не находится между даты первой записи в таблице истории, хотя запись в порядке, потому что evaldate находится между начальной и конечной датами третьей записи в таблице истории.
Надеюсь, это имеет смысл! В чем-то вроде SAS я могу создать массив и выполнить цикл проверки каждой записи в таблице истории. Как мне сделать это в SQL? То, что я пытался сделать, это просто обновить первую таблицу с флагом, если даты записей являются недействительными. Есть идеи? Спасибо !!!