Peter Nack: Werte mehrerer Datensaetze in Abhaengigkeit zueinander aendern

Guten Tag Forum,

ich habe folgende Tabelle Foo:

id | name  | longitude  | latitude
-----------------------------------
1  | Test0 | 133.120035 | 9.6522630
2  | Test1 | 83.2300000 | 27.430000
3  | Test2 | 83.2300000 | 27.430000
4  | Test3 | 83.2300000 | 27.430000
5  | Test4 | 83.2300000 | 27.430000
6  | Test5 | 113.122235 | 21.651163
7  | Test6 | 133.120035 | 9.6522600
7  | Test7 | 133.120035 | 9.6522600

Ich wuerde nun gerne alle Datensaetze, welche die gleichen Longitude- und Latitude-Angaben besitzen, um einen gewissen Wert erhoehen - jedoch in Abhaengigkeit zu dem jeweils vorherigen (bereits erhoehten) Wert.
Sprich, der erste Datensatz wird um 0.002 erhoeht. Der naechste um 0.004, der darauffolgende um 0.006 usw. usf.

Das Ergebnis sollte also sein:

id | name  | longitude  | latitude
-----------------------------------
1  | Test0 | 133.120035 | 9.6522630
2  | Test1 | 83.2300000 | 27.430000
3  | Test2 | 83.2320000 | 27.432000 - um 0.002 erhoeht
4  | Test3 | 83.2340000 | 27.434000 - um 0.004 erhoeht
5  | Test4 | 83.2360000 | 27.436000 - um 0.006 erhoeht
6  | Test5 | 113.122235 | 21.651163
7  | Test6 | 133.120035 | 9.6522600
7  | Test7 | 133.122035 | 9.6542600 - um 0.002 erhoeht

Ich habe ehrlich gesagt nun keinen blassen Schimmer wo ich hier anfangen muss zu suchen.
Von daher wuerde ich mich ueber Tipps und Stichwoerter, die mich an dieser Stelle weiterbringen, freuen.

Besten Dank von meiner Seite!
Peter Nack

  1. Hallo,

    Ich wuerde nun gerne alle Datensaetze, welche die gleichen Longitude- und Latitude-Angaben besitzen, um einen gewissen Wert erhoehen - jedoch in Abhaengigkeit zu dem jeweils vorherigen (bereits erhoehten) Wert.
    Sprich, der erste Datensatz wird um 0.002 erhoeht. Der naechste um 0.004, der darauffolgende um 0.006 usw. usf.

    Das Ergebnis sollte also sein:

    id | name  | longitude  | latitude

    1  | Test0 | 133.120035 | 9.6522630 - nicht erhöht?
       2  | Test1 | 83.2300000 | 27.430000 - auch nicht?

    3  | Test2 | 83.2320000 | 27.432000 - um 0.002 erhoeht
    4  | Test3 | 83.2340000 | 27.434000 - um 0.004 erhoeht
    5  | Test4 | 83.2360000 | 27.436000 - um 0.006 erhoeht

    6  | Test5 | 113.122235 | 21.651163 - wieder nicht?
       7  | Test6 | 133.120035 | 9.6522600 - und wieder nicht?
       7  | Test7 | 133.122035 | 9.6542600 - um 0.002 erhoeht - wieso nicht um 0.008?

    Stichworte:

    • Serverseitiges Programm
      – SQL UPDATE Statement
      – Schleife für die einzelnen SQL-Statements, wobei jeweils eine Variable gesetzt wird mit dem Wert, um den als nächstes erhöht werden soll.

    Gruß, Don P

    1. Hallo Don,

      Danke fuer deine Antwort!

      id | name  | longitude  | latitude

      1  | Test0 | 133.120035 | 9.6522630 - nicht erhöht?
         2  | Test1 | 83.2300000 | 27.430000 - auch nicht?

      3  | Test2 | 83.2320000 | 27.432000 - um 0.002 erhoeht
      4  | Test3 | 83.2340000 | 27.434000 - um 0.004 erhoeht
      5  | Test4 | 83.2360000 | 27.436000 - um 0.006 erhoeht
         6  | Test5 | 113.122235 | 21.651163 - wieder nicht?
         7  | Test6 | 133.120035 | 9.6522600 - und wieder nicht?
         8  | Test7 | 133.122035 | 9.6542600 - um 0.002 erhoeht - wieso nicht um 0.008?

      ID 7 wurde nicht erhoeht, da es sich bei diesem Datensatz um das erste Vorkommen handelt. ID 2 -5 haben ja andere Werte fuer Latitude und Longitude.

      ID 8 nur um 0.002, da bisher nur ein Datensatz mit identischen LL-Werten existiert. Die Datensaetze der IDs 2-5 werden an dieser Stelle nicht beachtet(eben wegen unterschiedlicher LL-Werte)

      Stichworte:

      • Serverseitiges Programm
        – SQL UPDATE Statement
        – Schleife für die einzelnen SQL-Statements, wobei jeweils eine Variable gesetzt wird mit dem Wert, um den als nächstes erhöht werden soll.

      Na gut, mir ging es eher um SQL-Funktionen, mit denen ich das machen kann. Wie ich das mit serverseitigen Scripten machen kann ist mir ersichtlich.

      Besten Dank
      Peter

      Ups vergessen: Mysql Server version: 5.0.67-community

  2. Guten Tag Forum,

    Hallo!

    Ich wuerde nun gerne alle Datensaetze, welche die gleichen Longitude- und Latitude-Angaben besitzen, um einen gewissen Wert erhoehen - jedoch in Abhaengigkeit zu dem jeweils vorherigen (bereits erhoehten) Wert.
    Sprich, der erste Datensatz wird um 0.002 erhoeht. Der naechste um 0.004, der darauffolgende um 0.006 usw. usf.

    Das Vorhaben ist nicht trivial, allerdings mit Datenbankmitteln lösbar. Ich würde dazu wohl eine Stored Procedure bzw. Function in der entsprechenden Datenbank einbinden, oder es Softwareseitig mittels dynamisch generiertem SQL-Statement lösen.

    Man kann etwa in SLQ eine variable deklarieren und hochzählen.

    SET @zaehler = 0;
    SELECT col1, col2, @zaehler:=@zaehler+1 AS zaehler FROM testtab WHERE x = y;

    Gruß, Markus**

    1. Hallo Markus,

      Das Vorhaben ist nicht trivial, allerdings mit Datenbankmitteln lösbar.

      Ja, hier kann man in einige Fallen schnappen.

      SET @zaehler = 0;
      SELECT col1, col2, @zaehler:=@zaehler+1 AS zaehler FROM testtab WHERE x = y;

      Ah interessant. Da werde ich mich mal mehr mit befassen.
      Eine Sache ist auch noch, dass es ja pro identische LL-Werte (Latitude,Longitude) einen Zaehler geben muss.. was die Sache noch ein wenig erschwert.

      Aber vielleicht war Dons Hinweis, dass besser mit einer Sprache != SQL zu machen, doch gar nicht so schlecht. Denn hier habe mehrere Moeglichkeiten der Implementierung und Validierung, so wie eine bessere Moeglichkeit der Protokollierung nebst Transactions fuer Rollbacks.
      Denn bei ueber >7000 Datensaetzen ist es doch recht schwierig den Ueberblick zu behalten, ob alle Werte nun korrekt korrigiert wurden oder nicht.

      Danke & MfG
      Peter Nack

      1. Hallo Markus,

        Hallo Peter,

        ich habe mich mal intensiv mit dem Rechnen mit Geokoordinaten befasst incl. sphärischer berechnungen sowie recht komplizierter entfernungsberechnungen. Beispielsweise das (schnelle) Auffinden von Anhäufungen im Koordinatenbestand.
        Falls das für Dich interessant sein könnte, kann ich Dir da den ein oder anderen Tip geben

        Danke & MfG
        Peter Nack

        Gruß, Markus**

        1. Hallo Markus,

          das klingt sehr interessant. Auch wenn ich mich fuer's erste auf die einfache Angabe von Standpunkten beschraenke.

          Zukuenftig werden sicherlich noch Funktionen hinzukommen wie "Was ist 50 km im Umkreis" etc. Dann werde ich gerne auf dich zurueckkommen ;-)

          Besten Dank
          Peter

  3. Hallo,

    ich habe folgende Tabelle Foo:

    id | name  | longitude  | latitude

    1  | Test0 | 133.120035 | 9.6522630
    2  | Test1 | 83.2300000 | 27.430000
    3  | Test2 | 83.2300000 | 27.430000
    4  | Test3 | 83.2300000 | 27.430000
    5  | Test4 | 83.2300000 | 27.430000
    6  | Test5 | 113.122235 | 21.651163
    7  | Test6 | 133.120035 | 9.6522600
    7  | Test7 | 133.120035 | 9.6522600

    Ich wuerde nun gerne alle Datensaetze, welche die gleichen Longitude- und Latitude-Angaben besitzen, um einen gewissen Wert erhoehen - jedoch in Abhaengigkeit zu dem jeweils vorherigen (bereits erhoehten) Wert.

    ich gehe davon aus, dass Deine Datenverfälschung eine einmalige Aktion ist.
    Ich löste diese Aufgabe mit der Programmiersprache meiner Wahl und dem Schreiben der Daten in eine neue Tabelle, die über einen entsprechenden eindeutigen Index auf der Spaltenkombination longitude, latitude verfügt. Der Rest der Aufgabe entspricht einem üblichen Gruppenwechsel :-)

    Für eine einmalige Aufgabe hielte ich es für übertrieben aufwendig, das unbedingt mit SQL-Mitteln lösen zu wollen. Wenn die Aufgabe jedoch einmal komplett erledigt wurde, ist es sinnvoll, mit SQL-Mitteln zu verhindern, dass die Aufgabe nochmals erforderlich wird. Selbstverständlich müssen die Anwendungen, die schreibend auf diese Tabelle zugreifen (INSERT, UPDATE) mit den erwarteten Fehlermeldungen des DBMS umgehen können.

    Was passiert, wenn die nach Deiner Vorschrift verfälschten Daten bereits vorhandenen richtigen Daten entsprechen?

    Welche Vorschrift hast Du dafür, wie die Reihenfolge innerhalb einer Gruppe gleicher longitude und latitude definiert ist?

    Freundliche Grüße

    Vinzenz