我有两个桌子
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中的附加信息或匹配值record_time。
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语句实现
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
即使同一学生ID 1203可以使用多个数据,我也需要基于class_time检索最新的勤工记录时间
如何实现上述输出,我在这里做错了什么?
感谢您的时间。
答案 0 :(得分:1)
在您的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
答案 1 :(得分:0)
请按以下方式尝试获得所需的输出。
data = df.loc[:, ~df.columns.str.contains('^Unnamed')]
print(data)