我正在尝试获取一个sql查询以返回上次状态为同一帐户的审核日志的行
喜欢
create table aud
(
id int IDENTITY(1,1),
date_time datetime,
[user] varchar(20),
account varchar(20),
[status] char(2)
)
insert into aud values(getdate(),'guy','123456','00')
insert into aud values(getdate(),'guy','123456','01')
insert into aud values(getdate(),'guy','123456','02')
insert into aud values(getdate(),'guy','123456','00')
insert into aud values(getdate(),'guy','123456','04')
insert into aud values(getdate(),'guy','123456','01')
我正在寻找的是一个列出之前帐户状态的结果 date_time,user,account,status,previous_status
我试过
select a.*, b.* from aud a
join aud b
on a.account = (
select top 1 account from aud where a.account = b.account and a.id > b.id order by date_time asc
)
但这加入的不仅仅是前一个
答案 0 :(得分:1)
如果您使用的是SQL Server 2012+,则可以将lag()
用于单个列。在您的情况下,您希望所有列outer apply
更好:
select a.*, aprev.*
from aud a outer apply
(select top 1 a2.*
from aud a2
where a2.account = a.account and a2.id < a.id
order by id desc
) aprev;
这假设id
以与date_time
相同的方式对记录进行排序。你的逻辑混合了两者 - 我认为最好只坚持一列来定义前一条记录。