Sql 选择过去两年的所有记录以及特定状态的最短日期

Sql 选择过去两年的所有记录以及特定状态的最短日期,sql,sql-server,tsql,Sql,Sql Server,Tsql,过去几天我一直在做这个,不管我做什么,我都会得到同样的错误记录集 表: 帐目 id | Customer | dateOpened -------------------------- 1 | ConAgra | 11/01/2013 2 | Fedex | 06/21/2014 案件状况 id | caseStatus --------------- 1 | A 2 | B 3 | M 4 | C 5 | H 6 | W

过去几天我一直在做这个,不管我做什么,我都会得到同样的错误记录集

表:

帐目

id | Customer | dateOpened  
--------------------------
1  | ConAgra  | 11/01/2013  
2  | Fedex    | 06/21/2014  
案件状况

id | caseStatus  
---------------  
1  | A  
2  | B  
3  | M  
4  | C  
5  | H  
6  | W  
AccountID | caseStatusID | startDate | endDate  
----------------------------------------------  
1         | 2            | 11/01/2013| 12/15/2013  
1         | 1            | 12/15/2013| 2/03/2014  
1         | 2            | 2/03/2014 | 3/17/2014  
2         | 6            | 6/21/2014 | 8/25/2014  
2         | 3            | 8/25/2014 | 10/21/2014  
2         | 1            | 10/21/2014| NULL  
m_账户_案例状态

id | caseStatus  
---------------  
1  | A  
2  | B  
3  | M  
4  | C  
5  | H  
6  | W  
AccountID | caseStatusID | startDate | endDate  
----------------------------------------------  
1         | 2            | 11/01/2013| 12/15/2013  
1         | 1            | 12/15/2013| 2/03/2014  
1         | 2            | 2/03/2014 | 3/17/2014  
2         | 6            | 6/21/2014 | 8/25/2014  
2         | 3            | 8/25/2014 | 10/21/2014  
2         | 1            | 10/21/2014| NULL  
我需要的是过去两年中开立的所有账户,以及最早的起始日期和案例状态,其中案例状态为A或B(不是两者,以最先指定的为准)。我一直得到的只是那些minDate为A或B的账户,这要少得多

select 
    c.ID, c.Customer, cs.caseStatus  
from 
    m_account_caseStatus m 
left outer join 
    caseStatus cs on m.caseStatusID = cs.ID 
left outer join 
    Account a on m.accountID = a.ID   
where 
    a.dateOpened >= dateAdd(yyyy, -2, getDate()) 
    and caseStatus IN ('A','B') 
    and (a.startDate = (select min(startdate)  
                        from m_account_caseStatus sub1  
                        where sub1.accountID = c.ID))  
我已经多次重复查询,移动子查询和caseStatus,但我总是只处理以A或B状态开始的案例,而不是所有案例和第一个A或B状态的日期/状态


感谢您提供的任何帮助。

那么您想要As&Bs,如果他们在特定日期,还是不是As&Bs?
declare @year2 datetime = dateAdd(yyyy, -2, getdate())
select accountID from
(
    -- all A or B accounts withing 2 years
    -- num = 1 (2,3..) is the 1st (2nd, 3rd...) date when account got A or B status
    select 
        m.accountID,
        row_number() over (partition by m.accountID order by startDate) as num
    from 
        m_account_caseStatus m 
        join 
        Account a on m.accountID = a.ID 
    where 
    a.dateOpened >= year2
    and m.caseStatusId in (1,2)
) T
where T.num = 1