Как объединить две таблицы на основе идентификатора, а затем получить значение даты из второй таблицы - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть две таблицы

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

Как добиться указанного выше результата и что я тут не так делаю?

спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Пожалуйста, попробуйте, как показано ниже, чтобы получить желаемый результат.

SELECT t.your_column
FROM
  (SELECT DISTINCT a.Student_id,
    MAX(b.attendance_recorded_time),
    a.class_type,
    MAX(a.class_time)
  FROM student_details
  LEFT JOIN 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)
  GROUP BY attendance_recorded_time,
    class_time
  ORDER BY a.student_id,
    a.class_time
  ) ;
0 голосов
/ 10 сентября 2018

В вашем where состоянии сначала поместите меньшее значение (в between) или сделайте это так:

демо

select * 
    from student_details a
    join attendance_details b using (student_id)
    where class_time - interval '1' hour <= attn_recorded_time 
      and attn_recorded_time < class_time
...