xxx Zeilen löschen
Klaus
- datenbank
Hallo,
also ich habe eine Tabelle:
id | monat | jahr | wert
1 | 5 | 2005 | 183
2 | 5 | 2005 | 82
3 | 5 | 2005 | 15
4 | 5 | 2005 | 32
5 | 4 | 2005 | 53
6 | 4 | 2005 | 73
7 | 4 | 2005 | 94
Jetzt möchte ich einen SQL Befehl ausführen, das pro Monat+Jahr nur noch 2 Zellen vorhanden sein sollen, und zwar die mit dem größten Wert:
id | monat | jahr | wert
1 | 5 | 2005 | 183
2 | 5 | 2005 | 82
5 | 4 | 2005 | 53
7 | 4 | 2005 | 94
Gibt es dafür einen SQL Befehl, oder muss ich dafür erst eine Schleife schreiben, die die einzelnen Monaten durchgeht und dann für den entsprechenden Monat nur 2 Zeilen überlässt?
Grüße Klaus
yo,
Jetzt möchte ich einen SQL Befehl ausführen, das pro Monat+Jahr nur noch 2 Zellen vorhanden sein sollen, und zwar die mit dem größten Wert:
dann musst du dir erst einmal überlegen, was passieren soll, wenn 2 datumswerte nicht eindeutig bestimmt werden können, zum beispiel wenn drei der höchsten werte gleich sind.
und die zweite frage ist, welche dbms benutzt du den und welche version ?
Ilja
Hallo,
dann musst du dir erst einmal überlegen, was passieren soll, wenn 2 datumswerte nicht eindeutig bestimmt werden können, zum beispiel wenn drei der höchsten werte gleich sind.
Dies wäre nicht so schlimm ;) da ich später 500 Zeilen in der Table lasse, aber nur 250 Anzeigen lasse.
Die Reserve ist nur für weitere, nicht so wichtige Berechnungen wichtig.
und die zweite frage ist, welche dbms benutzt du den und welche version ?
Also ich benutzte MySQL 4.1, aber alle neuen DB's verstehen die Standard-SQL Befehle.
Grüße Klaus
yo,
Also ich benutzte MySQL 4.1, aber alle neuen DB's verstehen die Standard-SQL Befehle.
mit nichten, nicht jedes dbms setzt den sql standard vollständig um und bieten oftmals auch funktionalitäten über den sql standard hinaus. wie auch immer, solltest du als erstes versuchen, eine abfrage zu ermitteln, welche die betroffenen datensätze ausgibt, die gelöscht werden sollen. wenn die richtige abfrage gefunden ist, sollte es einfach sein, es in ein DELETE statement einzubauen. ohne garantie kannst du ja mal folgende abfrage versuchen.
SELECT tab1.id, tab1.monat, tab1.jahr, tab1.wert
FROM tabelle AS tab1
WHERE tab1.id IN
(SELECT tab2.id FROM tabelle AS tab2 WHERE tab1.monat = tab2.monat AND tab1.jahr=tab2.jahr ORDERY BY tab2.jahr, tab2.monat LIMIT 0,2
)
Ilja
cough, cough
muss natürlich in der WHERE klausel anstelle von "IN" "NOT IN" heißen, schließlich willst du ja löschen. ;-)
Ilja