我希望拉近最近两周,并返回所有项目编号,这些项目在报告的最近日期状态为3,而在相应项目的第二个最近日期除了3之外的任何项目据报道。我本质上希望将每个项目编号作为唯一ID,并且对于每个项目,比较其报告的2个最近日期的状态,并返回最近报告日期中当前状态为3的所有项目,但也包括上次报告日期不是3。希望这是有道理的。表格如下。
ID Report Date Dept Cost Center Sub Segment Status Project Number
1 1/16/2015 Tech 121 C&R 1 21046
2 1/21/2015 Tech 122 Mobil 3 21333
3 1/16/2015 Acct 121 C&R 2 21333
4 1/21/2015 Acct 122 Mobil 1 21046
5 1/16/2015 Fin 121 C&R 3 24567
6 1/21/2015 Fin 122 Mobil 2 24888
7 1/16/2015 Tech 121 C&R 1 24888
8 1/21/2015 Tech 122 Mobil 2 24567
9 1/16/2015 Acct 121 C&R 3 24777
10 1/21/2015 Acct 122 Mobil 1 25555
11 1/16/2015 Fin 121 C&R 2 25555
12 1/21/2015 Fin 122 Mobil 3 24777
13 1/16/2015 Tech 121 C&R 3 55567
14 1/21/2015 Tech 122 Mobil 3` 55567
答案 0 :(得分:1)
这是一种在where
子句中使用两个条件的方法:
select pn.project_number
from (select project_number, max(report_date) as maxrd
from t
group by project_number
) as pn
where 3 = (select t2.status
from t as t2
where t2.project_number = t.project_number and t2.date = pn.maxrd
) and
3 <> (select top 1 t2.status
from t t2
where t2.project_number = t.project_number and
t2.report_date < pn.maxrd
order by t2.report_date desc
);
这两个条件几乎遵循你的逻辑。这些假设项目/报告日期对没有重复。