2013-06-30 3 views
1

У меня есть набор результатов, как это:MySQL - Выполните проверку групп записей

"id","reference_id","type" 
"1","aaa","A" 
"2","aab","M" 
"3","aac","A" 
"4","aaa","M" 
"5","aaa","E" 
"6","aab","M" 
"7","aac","M" 
"8","aab","D" 
"9","aac","M" 

Я хочу, чтобы запустить некоторые валидации на него с помощью SQL.

  • Каждый жизненный цикл reference_id должен содержать только один «А»;
  • Каждый жизненный цикл reference_id должен составлять не менее 1 "E" и/или 1 "D";

Как выполнить итерацию по набору результатов и выполнить проверки для каждой группы записей (reference_id).

+0

Каждый жизненный цикл reference_id должен содержать только один «А»; --- ровно один А или менее 2 А? – Xie

+0

@ Xie - Точно 1 "A". – naschoff

ответ

2

(Обновлено) Тест:

select r.* 
from my_result_set r 
join (select reference_id 
     from my_result_set 
     group by reference_id 
     having sum(case type when 'A' then 1 end) = 1 and 
      sum(case when type in ('D','E') then 1 end) >= 1) s 
    on r.reference_id = s.reference_id 

here SQLFiddle.

+1

Это возвращает все «хорошие» reference_id. При выполнении проверки можно, вероятно, найти неаудирующие. – Xie

+0

Марк, я думал, что это сработало, и это похоже на то, что он группирует результат, и мне нужно, чтобы он оставался негруппированным. – naschoff

+0

@naschoff: см. Мой обновленный ответ. –

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