MS-Office-Forum

MS-Office-Forum (https://www.ms-office-forum.net/forum/index.php)
-   SQL (https://www.ms-office-forum.net/forum/forumdisplay.php?f=41)
-   -   Dopplete Datensätze löschen (https://www.ms-office-forum.net/forum/showthread.php?t=347313)

DN_Eagle 13.11.2017 11:30

Dopplete Datensätze löschen
 
Hallo zusammen,

ich habe eine Tabelle in der die Stempelzeiten der Mitarbeiter gespeichert werden. Nun ist es so, dass schon mal doppelte Datensätze (bis auf die ID) vorhanden sind. Mit der folgenden Abfrage kann ich sehen wie oft einige Datensätze vorhanden sind.

PHP-Code:

SELECT COUNT(*), terminaldam_idbuch_artdatumuhrzeitpersonal_id
FROM stempelzeiten
GROUP BY terminal
dam_idbuch_artdatumuhrzeitpersonal_id
HAVING COUNT
(*) > 1
AND datum '08.11.2017' 

Ergebnis:

3 001 000004295513831 1 2017-11-08 00:00:00.000 1900-01-01 05:58:47.000 507
3 001 000004295518770 0 2017-11-08 00:00:00.000 1900-01-01 15:30:10.000 1004
3 001 000004295518770 1 2017-11-08 00:00:00.000 1900-01-01 06:48:56.000 1004
3 001 000004295523333 1 2017-11-08 00:00:00.000 1900-01-01 05:54:48.000 654
3 001 000004295525526 0 2017-11-08 00:00:00.000 1900-01-01 15:30:04.000 683
3 001 000004295525526 1 2017-11-08 00:00:00.000 1900-01-01 06:49:08.000 683
3 001 000004295525756 0 2017-11-08 00:00:00.000 1900-01-01 15:36:23.000 1007
3 001 000004295525756 1 2017-11-08 00:00:00.000 1900-01-01 06:36:58.000 1007


wie bekomme ich es nun hin, wenn es 3 Datensätze mit identischem Inhalt (bis auf die ID) gibt, zwei davon zu löschen so dass nur noch einer übrig bleibt?

Vielen Dank für Eure Hilfe im Voraus.

hcscherzer 13.11.2017 22:36

Ob das tatsächlich mit einem einzigen SQL Befehl geht?
Ich bin nicht sicher.

Ich würde es sequentiell, also in einer StoredProcedure lösen, mit einem Cursor, der durch die Datensätze iteriert. Ist das Zufall, dass alle mehrfachen genau 3 mal vorkommen?

Und es wäre schon interessant zu wissen, warum die Erfassung-Software so einen Schwachsinn überhaupt zulässt. Also da würde ich mehr >Energie hineinstecken, das abzustellen.

ebs17 13.11.2017 23:58

Zitat:

Ist das Zufall, dass alle mehrfachen genau 3 mal vorkommen?
In der gezeigten Datenmenge gibt es kein einziges Duplikat. Vermutlich hat die identische Vervielfachung besondere Gründe (unbeabsichtigter CROSS JOIN o.ä.).

Zitat:

Ob das tatsächlich mit einem einzigen SQL Befehl geht?
Wenn man will, schon:
Code:

DELETE
FROM
  stempelzeiten AS S
WHERE
  EXISTS
      (
        SELECT
            NULL
        FROM
            stempelzeiten AS X
        WHERE
            X.ID < S.ID
              AND
            X.terminal = S.terminal
              AND
            X.dam_id = S.dam_id
              AND …
      )

Die Vervollständigung der Schlüsselvergleiche ist sicher eigenlösbar.

Im Ergebnis verbleibt je Duplikatgruppe der Datensatz mit der kleinsten ID.

DN_Eagle 14.11.2017 08:53

@hcscherzer
Der Hintergrund ist folgender:
Unsere Zeiterfassung wird mit dem TR515 Tool von GigaTMS gemacht. Dieses Tool speichert die Stempelzeiten der Mitarbeiter in eine TXT Datei auf dem Server.
Über ein PHP Script lese ich diese Datei aus und speichere die Daten in eine Tabelle im SQL-Server. Nun kann es vorkommen, dass von dem Terminal die Stempelzeiten doppelt oder auch dreifach in die TXT Datei abgespeichert werden, so dass beim Übertragen in den SQL-Server ich doppelte oder dreifache (bis auf die ID) Datensätze habe. Warum das TR515 Tool manchmal diesen Fehler macht habe ich noch nicht gefunden. Nun dachte ich, dass im PHP Script nach der Übertragung noch eine weitere SQL Anweisung folgt die mir die doppleten Einträge wieder löscht, so dass nur noch ein gültiger Eintrag übrig bleibt.
Zusätzlich überlege ich aber gerade, dass PHP Script so zu programmieren, dass die doppelten Einträge erst gar nicht im SQL-Server landen.

@ebs17
Vielen Dank für Deinen Tipp.
In der gezeigten Datenmenge sieht man in der ersten Spalte das dieser Datensatz z.B. 3x vorkommt. Dein SQL Statement werde ich aber mal aufgreifen und probieren ob ich damit Erfolg habe.

Nochmals vielen Dank.

hcscherzer 15.11.2017 07:58

Zitat:

von Eberhard
In der gezeigten Datenmenge gibt es kein einziges Duplikat.

Das ist ja auch bereits das Ergfebnis der Aggregation.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.