表: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在同一天。
答案 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