2013-05-22 3 views
0

Таблица: working_historyСравнение данных в одной таблице SQL

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 

Я хочу, чтобы каждый, кто имел ЭСТА = L, а затем проверить, чтобы убедиться, что их соответствующие Reason event_dt матч Статус event_dt. В приведенной выше таблице,

145 status 6/5/2006  L 

должен вернуться, так как event_dt (6/5/2006) для field.status = L, не имеет данных, где поле = Причина в тот же день.

+2

В будущем пост, что вы попробовали. Это поможет нам помочь вам. – xQbert

+1

Что такое 'ESTA'? Это то же самое, что и «Данные»? Я не понимаю, какую продукцию вы ожидаете. Можете ли вы предоставить полный набор результатов на основе ваших данных образца? –

+0

ESTA is Status, поэтому Field = 'Status' и Data = 'L'. Результаты поиска 145 status 6/5/2006 L (так как отсутствует Event_dt, где Field = 'Reason' для этой записи). –

ответ

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 Self для генерации двух наборов данных, позволяющих быстро идентифицировать информацию в одном наборе, но не в другом. Visual reference

+0

Спасибо xQbert. SQL, который вы упомянули, дает мне для всех Data (где Field = 'Status'). я хотел найти все идентификаторы, чья Event_DT с Field = 'Status' и Data = 'L', is (Event_DT) недоступна, где Field = 'Reason'. , например, в приведенной выше таблице, «145 status 6/5/2006 L», не имеет EFDT с полем «Причина» –

+0

@KU добавил 'и WHSStatus.Data = 'L'' – xQbert

Смежные вопросы