复杂SQL查询的解决方案
我有以下数据库表复杂SQL查询的解决方案,sql,oracle,Sql,Oracle,我有以下数据库表APP\u用户 USER_NAME OLD_STATUS NEW_STATUS STATUS_CHANGE_DATE ------------------------------------------------------------------------------ STEVE BALE LOGGED_OUT UNAVAILABLE 12/12/2012 5:04:24.736437 AM STEVE BAL
APP\u用户
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
用户名旧状态新状态更改日期
------------------------------------------------------------------------------
史蒂夫·贝尔登出不可用2012年12月12日上午5:04:24.736437
STEVE BALE不可用2012年12月12日上午6:04:24.736437
STEVE BALE不可用2012年12月12日上午7:31:08.591801
史蒂夫·贝尔不可用2012年12月12日上午7:41:46.373138
STEVE BALE不可用2012年12月12日上午8:30:21.218388
STEVE BALE不可用2012年12月12日上午9:24:27.812461
STEVE BALE不可用2012年12月12日上午10:44:52.724405
STEVE BALE无法登出2012年12月12日上午11:30:50.724405
我必须显示每个状态的用户状态开始日期和时间以及结束日期和时间
类似于从2012年12月12日5:04:24.736437上午到2012年12月12日6:04:24.736437上午用户不可用。您只需要“下一个”记录,因为状态似乎正在更改。您可以使用lead功能执行此操作:
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
您只需要“下一个”记录,因为状态似乎正在改变。您可以使用lead功能执行此操作:
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
是否需要显示初始“注销”记录的记录。。。如果是,那么“开始”日期/时间是什么?是否需要显示初始“注销”记录的记录。。。如果是的话,“开始”日期/时间是什么?