У меня есть две таблицы
Table 1 - student_id number, class_type varchar2(10), class_time date, attn_time date.
Table 2 - student_id number, attendance varchar2(5), attn_recorded_time date.
Я создаю здесь отчет, в котором мне нужно распечатать все значения из таблицы 1 и дополнительную информацию или соответствующее значение записано_времени из таблицы 2 на основе определенных условий.
SELECT a.student_id ,
a.class_type,
a.class_time,
b.attn_recorded_time
FROM student_details a
LEFT JOIN attendance_details b
ON a.student_id = b.student_id
WHERE a.class_time > b.attn_recorded_time
AND b.attn_recorded_time BETWEEN a.class_time AND (a.class_time - 1/24)
ORDER BY a.student_id,
a.class_time;
Таким образом, условие здесь: class_time всегда должно быть больше времени посещения, а между class_time и class_time - 1 час.
Я пытаюсь добиться того же, используя оператор слияния
merge INTO student_details a USING attendance_details b ON (a.student_id = b.student_id)
WHEN matched THEN
update set a.attn_time = b.attn_recorded_time
where b.attn_recorded_time between a.class_time and a.class_time- 1/24;
Данные для таблицы 1
Student_id class_type class_time attn_time
1203 English 2018-09-10 11:00:00
1203 Maths 2018-09-10 11:30:00
Данные для таблицы 2
Student_id attendance attendance_recorded_time
1203 Y 2018-09-10 10:00:00
1203 Y 2018-09-10 11:00:00
1203 Y 2018-09-10 08:00:00
1203 Y 2018-09-10 09:00:00
необходимые данные
Student_id class_type class_time attn_time
1203 English 2018-09-10 11:00:00 2018-09-10 10:00:00
1203 Maths 2018-09-10 11:30:00 2018-09-10 11:00:00
, несмотря на то, что для одного и того же student_id 1203 доступно несколько данных, мне нужно получить последнее значение посещаемости_ресурса на основе class_time
Как добиться указанного выше результата и что я тут не так делаю?
спасибо за ваше время.