我正在使用SQL語法的數據庫系統上工作。但是我無法在下面的代碼中使用交叉應用。有沒有辦法重寫這個沒有適用?將SQL Server查詢更改爲純ANSI SQL查詢
declare @rsBuildDetails table(dt datetime, build varchar(255), val varchar(255));
insert into @rsBuildDetails (dt, build, val)
values ('20100101', '1', 'pass')
,('20100102', '2', 'fail')
,('20100103', '3', 'pass')
,('20100104', '4', 'fail')
,('20100105', '5', 'fail')
,('20100106', '6', 'fail')
,('20100107', '7', 'pass')
,('20100108', '8', 'pass')
,('20100109', '9', 'pass')
,('20100110', '10', 'fail');
with passed as
(
select *
from @rsBuildDetails
where val='pass'
)
select distinct
preFail.dt AS FailedDt,
postFail.dt AS SecondFailedDt
from
passed
cross apply
(select top 1
pre.*
from
@rsBuildDetails as pre
where
pre.dt < passed.dt
and pre.val = 'fail'
order by
pre.dt desc) as preFail
cross apply
(select top 1
post.*
from
@rsBuildDetails as post
where
post.dt > passed.dt
and post.val = 'fail'
order by
post.dt asc) as postFail
難道你真的想要一個純粹的ANSI SQL查詢,或你想要一個特定的RDBMS? –
@Tim,Shnugo能夠回答我的問題。謝謝 – jyim89