mimicry: Fehlende fortlaufende Nummer

Hi zusammen,

hat jemand eine Idee dazu:

Habe in einer Datentabelle Aufträge stehen, die eine Spalte "Rechnungsnummer" hat. Diese unterscheidet sich von der ID (Auftragsnummer), ist aber fortlaufend, je nach Datum der Bezahlung. (Bzw. manche Datensätze haben eben keine, wenn diese Aufträge storniert wurden)

Die Frage:

Kann ich mit SQL Lücken in dieser fortlaufenden Liste finden. Also rausfinden, ob eine oder mehrere Zahlen im Fortlaufenden fehlen?

Danke für die Hilfe

M.

  1. n'abend,

    Habe in einer Datentabelle Aufträge stehen, die eine Spalte "Rechnungsnummer" hat. Diese unterscheidet sich von der ID (Auftragsnummer), ist aber fortlaufend, je nach Datum der Bezahlung. (Bzw. manche Datensätze haben eben keine, wenn diese Aufträge storniert wurden)

    Wenn du die Datensätze (mehr die Auftragsnummern) haben möchtest, zu denen es keine Rechnungsnummer gibt, brauchst du doch nur danach zu fragen.

    Angenommen deine Tabelle hat Auftragsnummer als Primärschlüssel und besitzt eine Spalte Rechnungsnummer, welche per default den Wert NULL hat. Deine Abfrage könnte dann wie folgt aussehen:

    SELECT auftragsnummer  
    FROM auftraege  
    WHERE rechnungsnummer = NULL;
    

    sollte dein Datenmodell so aussehen, dass du eine Tabelle auftraege hast, die lediglich die Daten zum Auftrag umfasst und eine zweite Tabelle rechnungen, welche neben rechnungsnummer und auftragsnummer die Rechnungsdaten enthält, könntest du dein Problem mit einem LEFT JOIN lösen.

    SELECT a.auftragsnummer  
    FROM auftraege a  
    LEFT JOIN rechnungen r  
    ON (r.auftragsnummer = a.auftragsnummer)  
    WHERE r.rechnungsnummer = NULL;
    

    Kann ich mit SQL Lücken in dieser fortlaufenden Liste finden. Also rausfinden, ob eine oder mehrere Zahlen im Fortlaufenden fehlen?

    nicht, dass ich wüsste. Das hängt aber wohl sehr stark von der verwendeten Datenbank ab.

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  2. Hej,

    Kann ich mit SQL Lücken in dieser fortlaufenden Liste finden. Also rausfinden, ob eine oder mehrere Zahlen im Fortlaufenden fehlen?

    Nicht ohne weiteres.

    Da gabs übrigens vor nicht allzulanger Zeit zwei Threads  zu:

    </archiv/2006/9/t136219/#m884657>
    </archiv/2006/9/t137451/#m892778>

    Beste Grüße
    Biesterfeld

    --
    Art.1: Et es wie et es
    Art.2: Et kütt wie et kütt
    Art.3: Et hätt noch immer jot jejange
    Das Kölsche Grundgesetz
  3. Hallo mimicry,

    Kann ich mit SQL Lücken in dieser fortlaufenden Liste finden.

    Ja, das geht. Es ist nur keine gute Idee, die Lücken füllen zu wollen :-)

    Also rausfinden, ob eine oder mehrere Zahlen im Fortlaufenden fehlen?

    Wie Du genau vorgehen kannst, hängt von Deinem Datenbankmanagementsystem (DBMS) ab. Eine mögliche Vorgehensweise:

    Erzeuge eine temporäre Tabelle mit allen Werten von 1 bis zur maximalen Rechnungsnummer. Ein LEFT JOIN von dieser temporären Tabelle auf Deine Datentabelle über die Rechnungsnummern mit der Einschränkung (IS NULL)
    liefert Dir genau die "Lücken".

    Die Realisierung hängt von den Möglichkeiten Deines DBMS ab, ich persönlich sähe dies als Funktion, was bei MySQL mindestens die Version 5.0.x voraussetzt ...

    Freundliche Grüße

    Vinzenz