0

表:工作历史

ID     Field     Event_dt      Data
145    Reason    10/20/2003     DOM
145    Reason    9/20/2007      LVE
145    Reason    3/17/2008      RTN
145    Reason    4/5/2008       POP
145    Reason    3/7/2009       POP
145    Reason    6/13/2009      TRE
145    status    10/20/2003     A        
145    status    6/5/2006       L        
145    status    11/27/2006     A        
145    status    9/20/2007      L        
145    status    3/17/2008      A        
145    status    6/12/2009      T   

我想要任何拥有 ESTA=L 的人,然后检查以确保他们各自的原因 event_dt 与状态 event_dt 匹配。在上表中,

145    status    6/5/2006       L

应该回来,因为 field.status = L 的 event_dt (6/5/2006) 在同一日期没有字段 = 原因的数据。

4

1 回答 1

0
SELECT * 
FROM working_History WHReason
RIGHT JOIN Working_history WHStatus
  on WHReason.ID = WHStatus.ID 
  and WHReason.field = 'Reason' 
  and WHStatus.field = 'status' and WHStatus.Data='L'
  and WHReason.Event_DT = WHStatus.Event_DT
WHERE WHReason.Event_Date is null

假设您只是在寻找没有理由而不是其他方式的状态。

这基本上是说,创建两组信息,一组用于原因字段,一组用于状态字段。然后根据它们的 ID 和事件日期组合这两个结果,包括状态集中的所有记录以及仅匹配原因的记录。将该结果限制为仅包括那些没有原因事件日期的结果。

它使用称为自连接的概念来生成两组数据,允许一组数据快速识别一组数据,但不能快速识别另一组数据。 视觉参考

于 2013-05-22T19:37:52.233 回答