比较同一表SQL中的数据

时间:2013-05-22 19:32:29

标签: sql sybase

表:working_history

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的人,然后检查以确保他们各自的Reason event_dt匹配Status event_dt。在上表中,

145    status    6/5/2006       L

应该返回,因为field.status = L的event_dt(6/5/2006),没有一个数据,其中Field = reason在同一天。

1 个答案:

答案 0 :(得分: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和事件日期将这两个结果组合在一起,包括状态集中的所有记录以及只有那些在理性上匹配的记录。将结果限制为仅包括没有理由事件日期的结果。

它使用一个名为Self Join的概念来生成两组数据,从而可以快速识别一组中的信息,而不是另一组中的信息。 Visual reference