2012-12-13 166 views
0

我有以下db表APP_USERS解決一個複雜的SQL查詢

 
USER_NAME  OLD_STATUS  NEW_STATUS  STATUS_CHANGE_DATE 
------------------------------------------------------------------------------ 
STEVE BALE  LOGGED_OUT  UNAVAILABLE  12/12/2012 5:04:24.736437 AM 
STEVE BALE  UNAVAILABLE  AVAILABLE  12/12/2012 6:04:24.736437 AM 
STEVE BALE  AVAILABLE  UNAVAILABLE  12/12/2012 7:31:08.591801 AM 
STEVE BALE  UNAVAILABLE  AVAILABLE  12/12/2012 7:41:46.373138 AM 
STEVE BALE  AVAILABLE  UNAVAILABLE  12/12/2012 8:30:21.218388 AM 
STEVE BALE  UNAVAILABLE  AVAILABLE  12/12/2012 9:24:27.812461 AM 
STEVE BALE  AVAILABLE  UNAVAILABLE  12/12/2012 10:44:52.724405 AM 
STEVE BALE  UNAVAILABLE  LOGGED_OUT  12/12/2012 11:30:50.724405 AM 

我要顯示用戶狀態的開始日期&時間和結束日期&時間爲每年的地位。

類似用戶UNAVAILABLE從2012/12/12 5:04:24.736437上午至2012年12月12日6:04:24.736437上午。

+0

您是否需要顯示最初的「LOGGED_OUT」記錄的記錄......如果是,那麼「從」日期/時間會是什麼? – Chipmonkey

回答

3

你只需要「下一個」記錄,因爲狀態似乎在改變。您可以使用主導功能執行此操作:

select user_name, new_status, status_change_date as StartTime, 
     lead(status_change_date) over (partition by user_name order by status_change_date) as EndTime 
from app_users 
+0

謝謝戈登。 – user1430989