2013-06-21 43 views
1

在一個包含每個員工的員工ID,每個員工的登錄時間和註銷時間的表中,我需要從每次註銷時間的登錄時間和最大值中提取最小值。問題是,員工每天都可以登錄和註銷多次。所以,我們有這樣的樣本數據,如何從Oracle中的表中提取最小和最大時間?

NAME  EMPID   LOGIN TIME   LOGOUT TIME 
user1  37  16-JAN-12 03.07.37 16-JAN-12 03.07.44 
user5  21  16-JAN-12 02.00.36 16-JAN-12 04.45.34 
user3  12  16-JAN-12 05.35.35 16-JAN-12 06.39.57 
user3  40  16-JAN-12 02.54.13 16-JAN-12 07.12.16 
user4  33  16-JAN-12 07.29.43 16-JAN-12 07.59.42 
user1  40  16-JAN-12 07.12.39 16-JAN-12 07.59.50 
user3  30  16-JAN-12 11.30.50 16-JAN-12 08.02.42 
user990  31  17-JAN-12 11.46.12 17-JAN-12 01.46.13 
user29  23  17-JAN-12 10.39.18 17-JAN-12 05.00.02 
user20  21  17-JAN-12 04.59.37 17-JAN-12 05.00.17 
user990  40  17-JAN-12 10.55.48 17-JAN-12 05.00.50 
user4  23  17-JAN-12 05.00.11 17-JAN-12 05.01.08 
user4  21  17-JAN-12 04.59.37 17-JAN-12 05.01.21 

我試過了。它只能工作一天,

SELECT username, MIN(login_time), MAX(logout_time) 
FROM Table_Name 
WHERE trunc(login_time) = '19-JAN-12' 
GROUP BY username; 

這給了我輸入日期的以下結果。這是我想對每一個日期,

NAME 

user1 19-JAN-12 11.00.26 19-JAN-12 08.00.53 
user3 19-JAN-12 11.05.53 19-JAN-12 11.36.02 
user29 19-JAN-12 09.49.32 19-JAN-12 06.48.08 
user990 19-JAN-12 10.59.59 19-JAN-12 08.11.15 
use23 19-JAN-12 06.40.36 19-JAN-12 08.36.07 
user43 19-JAN-12 11.23.05 19-JAN-12 08.28.02 
user89 19-JAN-12 02.38.54 19-JAN-12 07.28.02 
user4 19-JAN-12 01.24.09 19-JAN-12 06.01.07 
user7 19-JAN-12 03.29.17 19-JAN-12 08.34.02 
user9 19-JAN-12 09.42.13 19-JAN-12 06.35.54 
+0

爲什麼-1?我犯了什麼罪? :) – MontyPython

+2

我沒有降低你,但你可以通過(錯誤)答案的數量來猜測你的問題有點不清楚。你的編輯改進了很多,但是你的輸入數據中仍然有16-JAN,而你的輸出數據中仍然有19-JAN? –

+0

我有我想要的結果。謝謝你。我所擁有的是每個用戶在每個日期的記錄,它告訴您最短的登錄時間和最長的註銷時間。在這種情況下,登錄和註銷日期相同。 – MontyPython

回答

7
SELECT username, TRUNC(login_time), min(login_time), max(logout_time) 
    FROM table_name 
GROUP BY username, TRUNC(login_time) 
ORDER BY username, TRUNC(login_time); 
+0

非常感謝wolφi,我很接近但沒有把它做對! – MontyPython

0

這可能是這麼簡單:

SELECT TRUNC(LOGIN_TIME]),NAME, EMPID, MIN(LOGIN_TIME), MAX(LOGOUT_TIME) 
FROM Table_Name 
GROUP BY TRUNC(LOGIN_TIME),NAME, EMPID 
ORDER BY EMPID, TRUNC(LOGIN_TIME) 

,將返回每個僱員/天一行,最早登錄和最新的註銷該員工/天。

+0

我已經試過這個,但是這從每個用戶整個數據庫中只返回一條記錄。我只需要找出每個用戶名的每日最小登錄時間和最大登出時間。我每天都需要這個。使用** GROUP BY NAME,EMPID **給我的記錄數=用戶名的數量。我每天都需要它。 – MontyPython

+1

對,沒有注意,看到更新的答案。 –

0

在oracle中:

SELECT NAME, TO_CHAR(IN_DT,'DD-MM-YYYY') as DT, TO_CHAR(MIN(IN_DT),'HH24:MI:SS') as LOGIN, TO_CHAR(MAX(OUT_DT),'HH24:MI:SS') as LOGOUT FROM USER_LOG GROUP BY NAME, TO_CHAR(IN_DT,'DD-MM-YYYY'); 

enter image description here

相關問題