Я работаю за столом, который ведет учет посещающих курс студентов.Данные хранятся с использованием идентификационного номера студента, идентификатора курса, названия курса, даты начала, даты окончания.Студент может пройти более одного курса, поэтому есть повторяющийся идентификационный номер студента, но с другим идентификатором курса, названием курса, датой начала и датой окончания.Здесь я пытаюсь выбрать студентов по количеству дней, используя DATEDIFF.
Извините за неправильное объяснение моей проблемы.структура таблицы, о которой я говорю:
studcourse1(internalstudentid, staffnoic, courseid, coursenm, StDt, EndDt, location, organizer, generalcategorycd, generalsubcategorycd, eid)
staffnoic - идентификационный номер персонала, StDt - дата начала.EndDt - дата окончания
Я проверил, в этой таблице нет первичного ключа или индексов, так как это не основа, а представление.
Извините, если предыдущий оператор слишком длинный.Давайте вместо этого воспользуемся этим.
SELECT GradeGroupCd, StudCourse1.StaffNoIC, (DATEDIFF( EndDt, StDt ) +1) TotalDay, StDt, EndDt
FROM StudCourse1, tblStaff, tblRefTitleGred
WHERE tblStaff.TitleGredCd = tblRefTitleGred.TitleGredCd
AND StudCourse1.StaffNoIC = tblStaff.StaffNoIC
AND StDt >= '2009-1-1' AND YEAR(EndDt) <= YEAR(NOW())
AND (DATEDIFF( EndDt, StDt ) +1) > 90
AND (GeneralSubCategoryCd = 'S0012' OR GeneralSubCategoryCd = 'S0014')
GROUP BY GradeGroupCd, StudCourse1.StaffNoIC
Вышеприведенное утверждение извлекает результаты для студента (используя staffnoic из таблицы tblStaff и таблицы StudCourse1), прошедшего курс более 90 дней с использованием (DATEDIFF (EndDt, StDt) + 1),Что меня действительно смущает, так это, например, запись из studcourse1 с staffnoic '111111111111', пример данных:
studcourse1(internalstudentid, staffnoic, courseid, coursenm, StDt, EndDt, location, organizer, generalcategorycd, generalsubcategorycd, eid)
studcourse1(10629,111111111111,AAA1811,Course1,2010-01-01 00:00:00, 2010-12-31 00:00:00, '', ABC Org, G003, S0012, E00001812)
(30684,111111111111,AAA6968,Course2,2009-02-10 00:00:00, 2012-02-09 00:00:00, '', ABC Org, G003, S0012, E00006894)
(30685,111111111111,AAA6970,Course3,2011-01-01 00:00:00, 2012-02-09 00:00:00, '', ABC Org, G003, S0014, E00006896)
При выполнении оператора SQL будет выбрана запись с StDt 2010-01-01 00: 00: 00 и EndDt 2010-12-31 00:00:00.Почему выделяется эта запись, а не другие, поскольку все они подпадают под AND StDt> = '2009-1-1' AND YEAR (EndDt) <= YEAR (NOW ()) ". <strong>Год, теперь относящийся к 2012 году. Как я могу сделать так, чтобы он выбирал тот, у которого есть StDt (2009-02-09) и EndDt (2012-02-09)?
И также "(DATEDIFF (EndDt, StDt) +1)> 90 ", почему он добавляет 1 к нему? Разве DATEDIFF (EndDt, StDt)> 90 не подходит?
Извините, если слишком много вопросов. Просто изучите MySQL недавно. Спасибо заваше время.