Zurück   klamm-Forum > Virtual World > Computer & Technik > Sonstiges

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14.04.2010, 19:32:55   #1 (permalink)
ex Smartfahrer

ID: 6633
Lose-Remote

Reg: 25.04.2006
Beiträge: 474
em-dee ist ein sehr geschätzter Menschem-dee ist ein sehr geschätzter Menschem-dee ist ein sehr geschätzter Menschem-dee ist ein sehr geschätzter Mensch
Standard MySQL - Doppelte Einträge, bis auf Neuesten anzeigen

Hallo zusammen,

vielleicht hat jemand eine Idee wie ich das gelöst bekommen könnte:

Habe ein Tabelle aus der ich doppelte einträge bis auf den neuesten löschen möchte.

id - serial - datum - text
1 – 2323 - datetime1 - asdasdasd
2 - 2323 - datetime4 - sgfvdbref
3 - 4444 - datetime3 - fjdnhrjnor
4 - 2323 - datetime2 - dfgghzjer
5 - 1234 - datetime5 -iorpiet095k
6 - 4444 - datetime6 - sefdthdg45

Die Tabelle ist nicht immer nach IDs sortiert.

Ergebnis wären IDs: 1,3,4

Ich suche jetzt alle Einträge von Serial (Geräte S/N) die doppelt vorkommen, jedoch nicht den mit dem aktuellsten Datum.

Ziel ist nachher dass ich die Einträge aus der DB löschen möchte, bis auf den schon erwähnten neuenesten Eintrag. Jedoch wäre zum "schrauben" eine Ausgabe ausreichend.

Hat jemand von euch eine Idee oder einen Ansatz, ob das in einer Abfrage zu lösen ist? Evtl. mit Subquerys (die ich irgendwie nicht so recht in den Kopf bekomme).

Die DB kann ich nicht Uniqe auf serial machen, da ich die doppelten Einträge erstellen und weiterverarbeiten muss, bis ich sie löschen kann. Die Einträge werden durch eine .EXE erzeugt auf die ich keinen Einfluss nehmen kann.

...Mark
Lose selbst generieren - 10% Refback!

Folgende Domains stehen zum Verkauf:

expresslose.de ••• klammtreff.de ••• klamm-treff.de ••• klammtreffen.de
em-dee ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 15.04.2010, 00:16:55   #2 (permalink)
Blubb!

ID: 121159
Lose-Remote

Claudi eine Nachricht über ICQ schicken
Reg: 20.04.2006
Beiträge: 122
Claudi sorgt für eine eindrucksvolle AtmosphäreClaudi sorgt für eine eindrucksvolle AtmosphäreClaudi sorgt für eine eindrucksvolle Atmosphäre
Idee

Interessante Aufgabe, garnet mal so einfach

Bin aber nach vielen Seiten Manual und einigen Tests zu folgendem Ergebnis gekommen:
Code:
1:
2:
3:
4:
5:
6:
SELECT `id`, `serial`, `datum`, `text` /* bzw DELETE */ FROM `test` t1 WHERE `datum` NOT IN (SELECT MAX(`datum`) FROM `test` t2 WHERE t1.`serial` = t2.`serial`)
Zur Erklärung:
Das Subquery sucht das Maximum in der Datumsspalte für jeden vorhandenen Serial. Sprich es listet die Reihen auf, die du behalten möchtest.
Danach zeigt das äußere Query nur noch die Datensätze an, die nicht in der Liste enthalten sind (bzw. löscht sie).

Ich muss zugeben, dass ich das Ganze selbst noch nicht komplett durchschaut habe, aber mit meinen Testdaten hats funktioniert
(Die Where-Klausel im Subquery verbindet die beiden Querys wohl irgendwie, so dass nicht auch andere Einträge mit gleichem Datumswert selektiert werden...)

Kannst es ja mal auf deine Daten anwenden (die wohl umfangreicher als meine 7 Testsätze sind) und schauen, obs da auch klappt.

Falls nicht... muss ich mir was andres überlegen

Gruß
Claudi ist offline   Mit Zitat antworten
Alt 15.04.2010, 19:25:58   #3 (permalink)
ex Smartfahrer

ID: 6633
Lose-Remote

Reg: 25.04.2006
Beiträge: 474
em-dee ist ein sehr geschätzter Menschem-dee ist ein sehr geschätzter Menschem-dee ist ein sehr geschätzter Menschem-dee ist ein sehr geschätzter Mensch
Standard

Zitat:
Zitat von Claudi Beitrag anzeigen
Interessante Aufgabe, garnet mal so einfach
.....
Falls nicht... muss ich mir was andres überlegen
OH MARK!
So einfach und ich komm net drauf!
Deine Abfrage ist einfach nur genial!!! Leider klappt das mit dem DELETE nicht, da man bei Subquerys net löschen kann.

Ich habs mit Hilfde eines Temporary-Table gemacht:
Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
CREATE TEMPORARY TABLE tmpid (Tid int); INSERT INTO tmpid SELECT PCBIndex FROM `pcbtable` pcb1 WHERE DTTestStart NOT IN (SELECT MAX(DTTestStart) FROM `pcbtable`pcb2 WHERE pcb1.Serial = pcb2.Serial); DELETE FROM pcbtable WHERE PCBIndex IN (SELECT Tid FROM tmpid WHERE 1);
Herzlichen dank dafür!! So muss ich nicht alles durchsuchen und von Hand löschen... Vor allem kann man das dann Automatisieren!

Freu mich echt dass dass du mich darauf gestossen hast. *blindbin*

...Mark
Lose selbst generieren - 10% Refback!

Folgende Domains stehen zum Verkauf:

expresslose.de ••• klammtreff.de ••• klamm-treff.de ••• klammtreffen.de
em-dee ist offline Threadstarter   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Doppelte Einträge in den RSS-Feeds No5251 Bug-Report 5 23.11.2009 09:08:35
Doppelte Einträge in Forenbox TerraTux Bug-Report 15 17.11.2009 14:55:17
[php/mysql] Doppelte Buchungen verhindern... Gremlin Programmierung 4 06.08.2009 17:54:39
Mysql: Einträge zählen Bercki Scripts & Software 2 15.11.2008 18:19:33
[PHP] Doppelt einträge in der Datenbank nicht Anzeigen... mydoys.de Programmierung 4 04.11.2006 13:49:01


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49:56 Uhr.