- 論壇徽章:
- 1
|
最近一直在用mysql數(shù)據(jù)庫做云項目,有段時間沒有接觸oracle了,昨天有朋友叫我?guī)兔τ胦racle處理一個考勤記錄的需求,我在考慮如何盡量精簡實現(xiàn)上面花了一些時間。于是把這個實現(xiàn)做個總結(jié)。
需求如下:
rownum為奇數(shù)的為進(jìn)廠時間,偶數(shù)的為離場時間
第一個奇數(shù)行的時間被第一個偶數(shù)行相減,以此類推
將上面兩步產(chǎn)生的時間結(jié)果集相加得出總時間作為當(dāng)天考勤時間
最終能和別的表聯(lián)合起來形成這樣的展示:
QQ截圖20150623092016.png (8.18 KB, 下載次數(shù): 76)
下載附件
2015-06-23 09:20 上傳
要我實現(xiàn)的是如何把時間一列的數(shù)據(jù)拆分成為兩列來顯示:
原來一列是這樣的:
1.png (4.84 KB, 下載次數(shù): 73)
下載附件
2015-06-23 09:20 上傳
要實現(xiàn)的拆分的效果是這樣的:
1.png (7.06 KB, 下載次數(shù): 58)
下載附件
2015-06-23 09:21 上傳
實現(xiàn)方式如下:
首先創(chuàng)建一個時間表(當(dāng)然這里我關(guān)注的只是scan_time這個字段,其他字段不用理會):- create table CMIS_PERSON_FI_DETAIL_TB
- (
- detail_id NUMBER(20) not null,
- scan_time DATE,
- person_fk_id NUMBER(20) not null
- )
復(fù)制代碼 其次,插入數(shù)據(jù),插入數(shù)據(jù)之后的效果是這樣的:
1.png (4.84 KB, 下載次數(shù): 69)
下載附件
2015-06-23 09:21 上傳
最后編寫sql進(jìn)行實現(xiàn),實現(xiàn)的sql語句如下所示:- select max(a) in_time, max(b) out_time
- from (select decode(mod(rownum, 2), 1, scan_time) a,
- decode(mod(rownum, 2), 0, scan_time) b,
- round(rownum / 2) c
- from CMIS_PERSON_FI_DETAIL_TB)
- group by c
- order by c;
復(fù)制代碼 運行sql,得到了想要的效果,如下所示:
1.png (7.06 KB, 下載次數(shù): 68)
下載附件
2015-06-23 09:22 上傳
|
|