Befüllen leerer Felder

Tom Weber

Benutzer
Beiträge
9
Hallo zusammen,
ich möchte mit einem SQL-Statement in der folgenden Tabelle (nur ein Ausschnitt aus einem großen Datensatz) fehlende Felder des Typs befüllen:
upload_2020-3-1_18-37-33.png
Dabei sollen nur die fehlenden Felder des Typs befüllt werden, für die der Typ zu genau diesem Datum für alle anderen Datensätze eindeutig ist.

Das Ergebnis soll demnach so aussehen:
upload_2020-3-1_18-48-53.png
Ich habe leider keine Idee eines möglichen Ansatzes und wäre sehr dankbar, wenn mir jemand weiterhelfen könnte.
 
Werbung:
Das Feld Typ soll mit der 11 befüllt werden, da zum gleichen Tag 01.03.2019 bereits zwei Datensätze jeweils mit dem Typ 11 befüllt sind.
Unabhängig jedoch von verschiedenen Ausprägungen der Ziffer soll dies geschehen.
Vielleicht ist es so verständlicher:
upload_2020-3-1_19-8-56.png
 

Anhänge

  • upload_2020-3-1_19-8-20.png
    upload_2020-3-1_19-8-20.png
    14 KB · Aufrufe: 1
schnellschuß:

Code:
 ziffer | typ
--------+-----
      1 |   
      1 |  10
      2 |   
      3 |  11
      4 |   
      4 |  12
      4 |  13
(7 rows)
test=*# with x as (select ziffer, count(distinct typ), array_agg(typ) filter(where typ is not null) as a from tomweber group by ziffer having count(distinct typ) = 1) update tomweber set typ = a[1] from x where tomweber.ziffer=x.ziffer and typ is null;
UPDATE 1
test=*# select * from tomweber order by ziffer;
 ziffer | typ
--------+-----
      1 |  10
      1 |  10
      2 |   
      3 |  11
      4 |   
      4 |  12
      4 |  13
(7 rows)
 
Das Feld Typ soll mit der 11 befüllt werden, da zum gleichen Tag 01.03.2019 bereits zwei Datensätze jeweils mit dem Typ 11 befüllt sind.
Unabhängig jedoch von verschiedenen Ausprägungen der Ziffer soll dies geschehen.
Vielleicht ist es so verständlicher:

Naja, Lösungsweg hab ich Dir gezeigt, allerdings habe ich eine geringfügig bessere Datenbank im Einsatz, Deine wird das vermutlich so nicht können. Kann man evtl. aber als Subselect umformen. Das jetzt noch auf das Datum auszuweiten sollte prinzipiell machbar sein.
 
Danke für die Erklärung. Vielleicht könntest du mir bitte noch bei einer allgemeineren Frage helfen.
Und zwar möchte ich aus dem folgenden Datensatz die Tage selektieren, bei denen zum gleichen Tag der gleiche Typ existiert – also der Typ eindeutig ist zu diesem Tag.

upload_2020-3-3_20-29-14.png

Der Output soll demnach so sein:

upload_2020-3-3_20-29-33.png
 
Werbung:
Kinders, könnt ihr euch mal abgewöhnen, Datensätze in Bildern zu schicken? Das nervt.

Code:
test=*# select * from tomweber ;
    tag     | typ
------------+-----
 2019-02-01 |   
 2019-02-01 |  12
 2019-02-01 |  12
 2019-05-01 |   
 2019-05-01 |  16
 2019-05-01 |  17
 2019-03-01 |  11
 2019-03-01 |  11
 2019-03-01 |   
(9 rows)

test=*# select * from tomweber where tag in (select tag from tomweber group by tag having count(distinct typ) = 1);
    tag     | typ
------------+-----
 2019-02-01 |   
 2019-02-01 |  12
 2019-02-01 |  12
 2019-03-01 |  11
 2019-03-01 |  11
 2019-03-01 |   
(6 rows)
 
Zurück
Oben