想象一下帶鎖門的房間。門附近有讀卡器。要打開門,您需要將您的卡放入讀卡器。Oracle如何選擇時間間隔
我有2代表與我的Oracle數據庫事件 - 項(門從打開的房間外) 退出(門被從房間內打開)
我要的是選擇presense間隔像 員工1在某天從10:00到11:00以及從12:00到18:00在房間裏。
但也有3個問題
- 有時用戶打開門,但不離開房間。
- 有時一個用戶打開門,另一個用戶和他一起出門,而 門一次打開。
- 數據的大小(以每桌約100K)
和問題:
- 什麼是選擇presense間隔
- 最好的辦法是有什麼辦法可以創建快速刷新物化視圖解決這個?
下面是示例
drop table entries;
drop table exits;
CREATE TABLE ENTRIES
(
"EVENTDATE" DATE NOT NULL,
"EVENTTIME" DATE NOT NULL,
"EMPLOYEEID" NUMBER NOT NULL
);
CREATE TABLE EXITS
(
"EVENTDATE" DATE NOT NULL,
"EVENTTIME" DATE NOT NULL,
"EMPLOYEEID" NUMBER NOT NULL
);
delete from ENTRIES;
delete from exits;
Insert into ENTRIES (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 08:44:00','DD-MON-RR HH24:MI:SS'));
Insert into ENTRIES (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 12:18:00','DD-MON-RR HH24:MI:SS'));
Insert into ENTRIES (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 12:19:00','DD-MON-RR HH24:MI:SS'));
Insert into ENTRIES (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 12:22:00','DD-MON-RR HH24:MI:SS'));
Insert into ENTRIES (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 12:37:00','DD-MON-RR HH24:MI:SS'));
Insert into ENTRIES (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 12:38:00','DD-MON-RR HH24:MI:SS'));
Insert into ENTRIES (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 12:39:00','DD-MON-RR HH24:MI:SS'));
Insert into ENTRIES (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 12:40:00','DD-MON-RR HH24:MI:SS'));
Insert into ENTRIES (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 13:22:00','DD-MON-RR HH24:MI:SS'));
Insert into EXITS (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 12:40:00','DD-MON-RR HH24:MI:SS'));
Insert into EXITS (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 12:36:00','DD-MON-RR HH24:MI:SS'));
Insert into EXITS (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 11:55:00','DD-MON-RR HH24:MI:SS'));
Insert into EXITS (EMPLOYEEID,EVENTDATE,EVENTTIME) values (8,to_date('01-AUG-13 00:00:00','DD-MON-RR HH24:MI:SS'),to_date('01-JAN-00 18:02:00','DD-MON-RR HH24:MI:SS'));
所需的結果是一樣的東西:
"EMPLOYEID" "EVENTDATE" "ENTERTIME" "LEAVETIME"
8 01-AUG-13 00:00:00 01-JAN-00 08:44:00 01-JAN-00 11:55:00
8 01-AUG-13 00:00:00 01-JAN-00 12:18:00 01-JAN-00 12:36:00
8 01-AUG-13 00:00:00 01-JAN-00 12:37:00 01-JAN-00 12:40:00
8 01-AUG-13 00:00:00 01-JAN-00 13:22:00 01-JAN-00 18:02:00
更新
如果有2個連續使用進入第一,忽略第二。 如果連續有2個退出使用秒,請先忽略
什麼是你想要實現的業務規則測試一樣嗎?如果用戶打開門但未退出,您如何確定他們何時實際退出?如果用戶關注某人,你如何確定?如果您發現用戶在時間B輸入了時間A並再次輸入,那麼您如何確定第一個時間間隔何時結束(假設用戶已與其他人退出)?如果您看到用戶在A處輸入,在B處退出並在C處退出,您是否認爲他們僅存在於A和B之間?你怎麼知道他們是不是不開門就是開門? –
檢查我提供的樣品。它是相當具有描述性的。總之如果先有2個連續使用,則忽略第二個。如果連續有2個退出使用秒,請先忽略 –
爲什麼日期和時間未存儲在同一字段中? – user2275460