以下是我的ATTENDANCE表中的一些示例行
EMP_NO RECORD_DATE CLOCKIN CLOCKOUT
361 09-AUG-16 08:34:17 16:50:17
361 11-AUG-16 09:09:22 17:32:45
361 15-AUG-16 08:56:09 16:54:42
361 22-AUG-16 08:21:58 16:54:43
361 24-AUG-16 08:29:54 17:02:35
361 26-AUG-16 08:46:42 19:02:40
361 29-AUG-16 08:56:15 19:00:52
361 31-AUG-16 08:31:31 19:00:38
我需要生成缺勤报告,因此我需要查找特定员工在日历月中不存在的所有日期。
我想到了。
SELECT MY_DATE FROM table_FOO
where MY_DATE NOT IN (SELECT RECORD_DATE FROM attendance WHERE emp_no='361')
有没有办法将所有日期调用到一个列中(这里是table_FOO中的my_date),它应与月份匹配。
请寻求帮助
答案 0 :(得分:1)
要填充table_foo,您可以使用循环:
declare
d date;
begin
d := to_date('01-01-2016','dd-mm-yyyy');
for i in 0..364 loop
insert into table_foo values (d + i);
end loop;
commit;
end;
示例代码将填写当年的所有日期。
答案 1 :(得分:1)
假设列RECORD_DATE和MY_DATE的数据类型为DATE
或TIMESTAMP
(如果不是这种情况,则应考虑更改),查询可以如下:
SELECT MY_DATE
FROM table_FOO
where TRUNC(MY_DATE, 'MM') NOT IN
(SELECT TRUNC(RECORD_DATE, 'MM') FROM attendance WHERE emp_no='361')
答案 2 :(得分:1)
假设表table_foo
和attandence
日期列具有same
数据类型,您可以使用以下查询来创建我们的参与度报告。
SELECT MY_DATE
FROM table_FOO
WHERE NOT EXISTS (SELECT 1
FROM attendance
WHERE emp_no = '361'
and record_date = MY_DATE
and to_char(record_date,'mm') = <input_month_number > );
此处input_month_number
可以是1 for Jan
,依此类推.. 12 for Dec
。