Hoi! ik heb een table met 40 miljoen rijen waarvan op basis van onderstaande voorwaarden zeker de helft verwijderd kan worden alvorens ik een andere tactiek moet bedenken om in de toekomst het aantal onnodige records in deze tabel te verminderen..
Ik ga eerst maar eens mijn best doen om het in gewone taal uit te leggen, en hoor dan graag of iemand een idee heeft hoe dit query-hoofdbrekertje daadwerkelijk uitgevoerd te krijgen.
1. ik heb een table die er als volgt uit ziet:
2. ik wil alle rijen verwijderen waarvan, binnen dezelfde 'PiD', geen wijziging heeft plaatsgevonden in 'Col1' en 'Col2' ten opzichte van de eerstvolgende rij op basis van de 'Datum' ervoor, met als uitzondering de oudste datum en de nieuwste datum per PiD. een klein voorbeeld:
Mijn hoofd raakt verward bij dit soort ingewikkelde wensen van mezelf, misschien kan iemand me (op weg) helpen hoe dit te bewerkstelligen, als het al onder deze voorwaarden te doen is. iets als... maar dan.. eeh.. anders
Mijn dank gaat reeds uit naar diegene die alleen al de moeite hebben genomen te begrijpen wat hierboven staat
Ik ga eerst maar eens mijn best doen om het in gewone taal uit te leggen, en hoor dan graag of iemand een idee heeft hoe dit query-hoofdbrekertje daadwerkelijk uitgevoerd te krijgen.
1. ik heb een table die er als volgt uit ziet:
2. ik wil alle rijen verwijderen waarvan, binnen dezelfde 'PiD', geen wijziging heeft plaatsgevonden in 'Col1' en 'Col2' ten opzichte van de eerstvolgende rij op basis van de 'Datum' ervoor, met als uitzondering de oudste datum en de nieuwste datum per PiD. een klein voorbeeld:
Id | PiD | Col1 | Col2 | Datum | |
1 | 120 | 23 | 44 | 2009-03-01 | <- bewaren, er zijn geen rijen met een latere datum van PiD 120 + Col1 is gewijzigd |
2 | 120 | 22 | 44 | 2009-02-18 | <- bewaren, er zijn geen rijen met een vroegere datum van PiD 120 |
3 | 140 | 143 | 196 | 2009-03-01 | <- bewaren, er zijn geen rijen met een latere datum van PiD 140 |
4 | 140 | 143 | 196 | 2009-02-26 | <- verwijderen, col1 en col2 zijn hetzelfde als de rij ervoor (qua datum) van PiD 140 |
5 | 140 | 143 | 196 | 2009-02-23 | <- verwijderen, col1 en col2 zijn hetzelfde als de rij ervoor (qua datum) van PiD 140 |
6 | 140 | 143 | 196 | 2009-02-12 | <- bewaren, col2 is gewijzigd t.o.v. col2 in de rij ervoor (qua datum) van PiD 140 |
7 | 140 | 143 | 209 | 2009-02-05 | <- bewaren, col1+col2 zijn gewijzigd t.o.v. de rij ervoor (qua datum) van PiD 140 |
8 | 140 | 144 | 199 | 2009-01-28 | <- verwijderen, col1 + col2 zijn hetzelfde als in de rij ervoor (qua datum) van PiD 140 |
9 | 140 | 144 | 199 | 2009-01-25 | <- verwijderen, col1 + col2 zijn hetzelfde als in de rij ervoor (qua datum) van PiD 140 |
10 | 140 | 144 | 199 | 2009-01-20 | <- bewaren, er zijn geen rijen met een vroegere datum van PiD 140 |
Mijn hoofd raakt verward bij dit soort ingewikkelde wensen van mezelf, misschien kan iemand me (op weg) helpen hoe dit te bewerkstelligen, als het al onder deze voorwaarden te doen is. iets als... maar dan.. eeh.. anders

PHP:
1
2
3
4
5
6
| $sql = mysql_query("SELECT DISTINCT (PiD) FROM tblname"); while ($row = mysql_fetch_array($sql)) { $sql2 = "DELETE FROM tblname WHERE PRODUCT_ID = $row['PiD'] AND ((Col1 AND Col2 [i]both are the same compared to the row with the closest date before this row and has the same PiD[/i]) AND (Datum != MIN(Datum) AND Datum != MAX(Datum) [i]within same PiD[/i])) } |
Mijn dank gaat reeds uit naar diegene die alleen al de moeite hebben genomen te begrijpen wat hierboven staat
