访问表 - 如何查看表,拉

时间:2016-04-18 22:19:25

标签: sql ms-access

我希望拉近最近两周,并返回所有项目编号,这些项目在报告的最近日期状态为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 

1 个答案:

答案 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
           );

这两个条件几乎遵循你的逻辑。这些假设项目/报告日期对没有重复。