2015-04-28 31 views
0

我需要根据某些条件过滤掉这些数据。Microsoft Access:具有相同ID的多个记录需要根据特定条件排除

  1. 如果ID有超过1个焦点,那么我只想保留最新的LastUpdatedDate记录。
  2. 如果ID具有2个具有相同焦点和相同域的记录,请保留最新的LastUpdatedDate记录。
  3. 如果ID具有2个记录用相同的焦点,但不同的结构域,并且所述阶段是3或更大,则保持两个记录

下面是示例数据:

ID LastUpdatedbyID Focus Domain Stage LastUpdateDate LastEndorsedDate 
1 1  AT APT 2 3/24/15 10:46 AM 3/24/15 10:46 AM 
1 1  ES ASS 2 3/27/15 10:23 AM 3/27/15 10:23 AM 
1 1  ITC A 2 3/24/15 6:57 AM  3/24/15 6:57 AM 
2 2  BP Fin 2 4/10/15 8:48 AM  4/10/15 8:48 AM 
2 2  BP Fin 3 4/10/15 10:46 AM 4/10/15 12:00 AM 
3 3  ES CS 3 3/16/15 1:56 PM  3/16/15 12:00 AM 
3 3  ES PM 3 3/16/15 1:56 PM  3/16/15 12:00 AM 
3 3  ES PM 1 3/15/15 1:56 PM  3/15/15 2:00 PM 

这里结果如下:

ID LastUpdatedbyID Focus Domain Stage LastUpdateDate  LastEndorsedDate 
1 1  ES ASS 2 3/27/15 10:23 AM 3/27/15 10:23 AM 
2 2  BP Fin 3 4/10/15 10:46 AM 4/10/15 12:00 AM 
3 3  ES CS 3 3/16/15 1:56 PM  3/16/15 12:00 AM 
3 3  ES PM 3 3/16/15 1:56 PM  3/16/15 12:00 AM 

回答

0

在这个例子中源表称为t因此改变其真实姓名。

这个查询应该给你你想要的结果。基本上三个不同的查询(每个条件一个)使用联合运算符组合在一起。我不认为它表现良好,它可能会得到改善,但使用Access 2010测试它时确实返回了正确结果:

select t.* from t inner join (
    select id, max(LastUpdateDate) as aLastUpdateDate 
    from t 
    where id not in (select id from t group by id,focus, Domain having count(*) > 1) 
    and id not in (select id from t where stage >= 3 group by id,focus having count(domain) > 1) 
    group by id having count(focus) > 1 
) a on a.ID = t.id and a.aLastUpdateDate = t.LastUpdateDate 

union all 

select t.* from t inner join (
    select id, focus, Domain, max(LastUpdateDate) as bLastUpdateDate 
    from t 
    group by id,focus, Domain 
    having count(*) > 1 
) b on b.ID=t.ID and b.Focus = t.Focus and b.Domain=t.Domain and b.bLastUpdateDate = t.LastUpdateDate 

union all 

select t.* from t inner join (
    select id, focus, stage 
    from t 
    where stage >= 3 
    group by id,focus, stage 
    having count(domain) > 1 
) c on c.ID=t.ID and c.Focus = t.Focus and c.stage = t.stage 
+0

您的前2个select语句的功能正确第三个select语句在我的实际数据集中返回了一行,我并不期待。我编辑了我的原始问题,并在我的示例数据中添加了最后一行。出于某种原因,它返回了我的数据集中的那一行。任何想法发生了什么? – Kmart6700

+0

@ Kmart6700我认为我犯了一个错误。最后的查询应该也可能包含舞台。我会更新答案。请立即尝试一下。 – jpw

+1

工作。谢谢。 – Kmart6700

相关问题