2012-12-13 3 views
0

je la table db suivante APP_USERSSolution à une requête SQL compliquée

 
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 

Je dois afficher l'état utilisateur date de début & heure et la date de fin & de temps pour chaque état.

Quelque chose comme l'utilisateur UNAVAILABLE du 12/12/2012 5: 04: 24.736437 AM au 12/12/2012 6: 04: 24.736437 AM.

+0

Avez-vous besoin d'afficher un enregistrement pour l'enregistrement initial "LOGGED_OUT" ... et si oui, quelle serait la date/heure de "from"? – Chipmonkey

Répondre

3

Vous avez juste besoin de l'enregistrement "suivant", car le statut semble changer. Vous pouvez le faire avec la fonction principale:

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

Merci Gordon. – user1430989