gurbelunder
SQL-Guru
- Beiträge
- 136
Hallo zusammen,
ich habe unter MySQL folgende Tabelle:
Innerhalb dieser Tabelle kommen Datensätze doppelt vor. Dies habe ich an der ersten Spalte, der JobID festgestellt durch:
Wie man sieht, interessieren mich erstmal nur die Einträge aus diesem Jahr. Das einzige, was sich unterscheidet, ist die RecNr, da die autoincrement ist.
Nun möchte ich von den doppelten Datensätzen alle die löschen, bei denen die RecNr kleiner ist als die des anderen Datensatzes. Beispiel dazu:
Zwei Datensätze haben beide die JobID 123456 und auch der Rest ist gleich bis auf die RecNr, der eine hat die 1 und der andere die 2. Ich möchte nun den Datensatz mit RecNr=1 löschen und den Datensatz mit RecNr=2 behalten.
Ich denke die ganze Zeit an Joins, aber da hab ich im Studium wohl Kreide geholt... ;-)
Habt ihr eine gute Idee?
Danke euch und Grüße,
David
ich habe unter MySQL folgende Tabelle:
Code:
mysql> describe AccountingPrimary;
+-------------------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------------+------------------+------+-----+---------+----------------+
| JobID | varchar(16) | YES | | NULL | |
| Status | char(2) | YES | MUL | NULL | |
| Year | varchar(4) | YES | MUL | NULL | |
| Month | char(2) | YES | | NULL | |
| Day | char(2) | YES | | NULL | |
| Sender | varchar(16) | YES | MUL | NULL | |
| ObjectClass | varchar(16) | YES | MUL | NULL | |
| Receiver | varchar(16) | YES | MUL | NULL | |
| JobName | varchar(16) | YES | MUL | NULL | |
| ProcessingTimeComplete | varchar(16) | YES | | NULL | |
| ExecutionTimeOfAll | varchar(16) | YES | | NULL | |
| NoOfAllExecutedFunctionCalls | varchar(16) | YES | | NULL | |
| NoOfAllIncorrectFunctionCalls | varchar(16) | YES | | NULL | |
| ObjectID | varchar(16) | YES | | NULL | |
| NoOfComponents | varchar(16) | YES | | NULL | |
| AccumulatedCompSize | varchar(16) | YES | | NULL | |
| SizeOfEachComp | varchar(128) | YES | | NULL | |
| YearMonth | varchar(6) | YES | MUL | NULL | |
| RecNR | int(10) unsigned | | PRI | NULL | auto_increment |
+-------------------------------+------------------+------+-----+---------+----------------+
19 rows in set (0.00 sec)
mysql>
Code:
select JobID, Count(JobID)
from AccountingPrimary
where YearMonth > '201212'
Group By JobID
Having count(JobID) >1;
Nun möchte ich von den doppelten Datensätzen alle die löschen, bei denen die RecNr kleiner ist als die des anderen Datensatzes. Beispiel dazu:
Zwei Datensätze haben beide die JobID 123456 und auch der Rest ist gleich bis auf die RecNr, der eine hat die 1 und der andere die 2. Ich möchte nun den Datensatz mit RecNr=1 löschen und den Datensatz mit RecNr=2 behalten.
Ich denke die ganze Zeit an Joins, aber da hab ich im Studium wohl Kreide geholt... ;-)
Habt ihr eine gute Idee?
Danke euch und Grüße,
David