Feld bei Dublette inkrementieren

kaeser

Neuer Benutzer
Beiträge
4
Hallo zusammen,

Ich habe in einer bestehenden MySQL-DB Datensätze, deren Identifier (auftrag) mehrmals vorkommen. Das Feld proofNr soll nun bei jedem Vorkommen um eins erhöht werden. Zur Verdeutlichung folgende Abfrage:
mysql> SELECT * FROM `korrektur` WHERE `auftrag`= 140802;
+--------+---------+------------+-------------+----------------+------------+-------------+-----------+---------+-----------+
| ID | auftrag | ausgang | ausgang_von | ausgang_medium | eingang | eingang_von | druckfrei | proofNr |
+--------+---------+------------+-------------+----------------+------------+-------------+-----------+---------+-----------+
| 187649 | 140802 | 2020-09-01 | 29 | 1 | 2020-09-08 | 29 | NULL | | 1 | -> OK
| 187783 | 140802 | 2020-09-08 | 29 | 1 | 2020-10-08 | 29 | NULL | | 1 | -> 2
| 188247 | 140802 | 2020-10-08 | 29 | 1 | 2020-10-19 | 29 | NULL | | 1 | -> 3
| 188395 | 140802 | 2020-10-19 | 29 | 1 | NULL | NULL | NULL | | 1 | -> 4
+--------+---------+------------+-------------+----------------+------------+-------------+-----------+---------+-----------+
4 rows in set (0,03 sec)

Ich hoffe, man versteht, was ich meine.
Wie kann man das in einer Query lösen? Ich bin dankbar für jede Hilfe!
Grüsse an alle
kaeser
 
Werbung:
würde es reichen, das nur bei der Ausgabe zu machen?

Code:
test=# select * from kaeser ;
  id  | nr
------+----
 4711 |  1
 4711 |  1
 4711 |  1
 4711 |  1
 4712 |  1
 4712 |  1
 4712 |  1
 4713 |  1
 4713 |  1
 4713 |  1
(10 rows)
test=*# select * , nr + row_number() over (partition by id order by ctid) -1 as new_nr from kaeser ;
  id  | nr | new_nr
------+----+--------
 4711 |  1 |      1
 4711 |  1 |      2
 4711 |  1 |      3
 4711 |  1 |      4
 4712 |  1 |      1
 4712 |  1 |      2
 4712 |  1 |      3
 4713 |  1 |      1
 4713 |  1 |      2
 4713 |  1 |      3
(10 rows)

Mit Update:

Code:
test=*# with x as (select * , ctid, nr + row_number() over (partition by id order by ctid) -1  as new_nr from kaeser) update kaeser set nr = new_nr from x where (x.id, x.ctid) = (kaeser.id,kaeser.ctid);
UPDATE 10
test=*# select * from kaeser ;
  id  | nr
------+----
 4711 |  1
 4711 |  2
 4711 |  3
 4711 |  4
 4712 |  1
 4712 |  2
 4712 |  3
 4713 |  1
 4713 |  2
 4713 |  3
(10 rows)


Ach ja, ist jetzt aber PostgreSQL.
 
Guten Abend zusammen
Ich habe MySQL version 5.7.30.
Und dann vielen Dank für den Lösungsvorschlag. Ich werde mir das morgen genauer anschauen - ich hab schon viereckige Augen und mein Chef meinte, dass es morgen auch noch reicht ... ;)
Ich wünsche Euch allen einen schönen Abend.
Gruss
kaeser
 
"mein Chef meint"
Sag ihm, dass Du eine ordentliche DB brauchst, morgen würde auch reichen- achne, Samstag.

Das Statement oben von akretschmer ist genau richtig, aber auf so einer alten Gurke läuft das nicht.
 
Werbung:
Zurück
Oben