例如,我必须为特定员工创建一个视图,该视图存储最近50天的出勤信息,而我的员工人数超过了
我将输入员工ID作为输入,并且我希望仅为该员工及其出勤详细信息的最后50天创建此视图。
简单的解释将不胜感激。
谢谢。
答案 0 :(得分:1)
视图只是存储的查询。因此,如果您始终只需要最近50天,那么
create or replace view v_50 as
select empno, ename, date_in, date_out
from attendance
where date_in >= trunc(sysdate) - 50
然后为您需要的任何员工获取数据:
select *
from v_50
where empno = 1234;
另一方面,您根本不需要视图-在原始表中执行相同操作:
select empno, ename, date_in, date_out
from attendance
where empno = 1234
and date_in >= trunc(sysdate) - 50
确保empno
和date_in
都已建立索引,并定期收集统计信息。
要检索特定月份的数据,一种选择是
select ...
from attendance
where to_char(date_in, 'yyyymm') = '202009'
基于函数的索引会有所帮助;否则,您将不得不使用类似
where date_in between date '2020-09-01' and date '2020-03-30'
如果date_in
被编入索引,则to_char
-将无法使用这样的索引。