2013-09-05 4 views
1

Я пытаюсь удалить весь блок из набора данных, когда минимальное требование (x < 15) выполняется в одной из реплик (см. Примеры данных ниже).Специфические критерии исключения MySQL

+------+-------+------------+----+ 
| id | block | repitition | x | 
+------+-------+------------+----+ 
| 5223 | 1  | 1   | 15 | 
| 5223 | 1  | 2   | 17 | 
| 5223 | 1  | 3   | 16 | 
| 5223 | 2  | 1   | 14 | 
| 5223 | 2  | 2   | 15 | 
| 6238 | 2  | 1   | 18 | 
| 6238 | 2  | 2   | 20 | 
| 6238 | 2  | 3   | 12 | 
| 6238 | 2  | 4   | 21 | 
| 7575 | 1  | 3   | 13 | 
| 7575 | 1  | 4   | 21 | 
| 7575 | 1  | 5   | 21 | 
+------+-------+------------+----+ 

мне помогли в этом отношении уже со следующим:

delete t1 
from your_table t1 
inner join 
(
    select id, block 
    from your_table 
    group by id, block 
    having sum(x < 15) > 0 
) t2 on t1.id = t2.id and t1.block = t2.block 

И это прекрасно работает. Я хотел бы знать, если я могу сделать то же самое, но только если x < 15 - это первое повторение в блоке - независимо от номера повторения.

Поэтому я хотел бы, чтобы запросить таблицу, и пусть это только удалять строки 4, 5, 10, 11, 12. текущая формула будет также удалять строки 6, 7, 8 и 9.

ответ

0
delete t4 
from your_table t4 
inner join 
    (select id,block From YourTable t1 
    inner join 
    ( 
     select id,block,min(repitition) as FirstRepitition 
     From YourTable Group By id,Block 
    ) t2 
    On t1.id = t2.id and t1.block = t2.block 
    and t1.Repitition = t2.FirstRepition and t1.x < 15 
) t3 
    On t4.id = t3.id and t4.block = t3.block 

было бы в одну сторону. Найдите самые ранние повторения, найдите те, где x < 15, затем удалите лот. Беспокойно, хотя ...

+0

Большое спасибо Тони Хопкинсону! Это потрясающе! – wernerbrand

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