请在此查询中获得一些帮助。我们有在帐户(地点)发生的事件(驱动器),一旦发生,它们在数据库中标记为完成(状态ID = 2)。
对于此查询,我希望能够搜索特定帐户,查找上次在此帐户中完成事件,然后找到将要发生的下三个已确认(状态ID = 1)的事件在这个帐户。
我不确定如何处理这个问题。我猜测某种子查询,但我在启动时遇到了一些麻烦。
到目前为止我所拥有的是:
select
dm.driveid, dm.fromdatetime, dm.statusid, stat.statustext, acct.internalname
from
rpt_drivemaster dm
inner join
rpt_accounts acct on dm.accountid = acct.accountid
inner join
rpt_drivestatusdef stat on dm.statusid = stat.statusid
where
acct.accountid = '17708'
and dm.fromdatetime >= dateadd(month, -1, getdate())
and dm.statusid not in (3,5,6)
order by
dm.fromdatetime;
这将为我提供此帐户的所有驱动器可追溯到一个月并期待。但我真正想做的只是给我下三个驱动器(2015年1月28日,2015年2月4日,2月18日)。
实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
试试这个:
with completes as (
select dm.driveid, dm.fromdatetime, dm.statusid, stat.statustext, acct.internalname
from rpt_drivemaster dm
inner join rpt_accounts acct on dm.accountid=acct.accountid
inner join rpt_drivestatusdef stat on dm.statusid=stat.statusid
where acct.accountid='17708'
and dm.fromdatetime >= dateadd(month,-1,getdate())
and dm.statusid = 2
),
confirmed as (
select top(3) dm.driveid, dm.fromdatetime, dm.statusid, stat.statustext, acct.internalname
from rpt_drivemaster dm
inner join rpt_accounts acct on dm.accountid=acct.accountid
inner join rpt_drivestatusdef stat on dm.statusid=stat.statusid
inner join completes as c
on c.accountid = dm.accountid
and dm.fromdatetime > c.fromdatetime
where dm.statusid = 1
order by dm.fromdatetime
)
select * from completed
union
select * from confirmed
order by fromdatetime;