Announcement

Collapse
No announcement yet.

Datesätze nach Datumskriterien selektieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datesätze nach Datumskriterien selektieren

    Schönen guten Morgen,

    mein Problem ist es, aus einer Tabelle alle Kunden rauszusuche, die seit einem bestimmten Datum nicht mehr bestellt haben.

    Die Tabelle enthält u.a. die Felder BELEG_ID, NAME, ORT, DATUM, ADRESSNUMMER die mich hier interessieren. Das Feld DATUM ist im Format tt.mm.yyyy. In der Tabelle sind alle Rechnungsbelege von allen Kunden enthalten. Gruppieren der Datensätze wäre über die ADRESSNUMMER möglich.

    Ich habe es zwar geschaft mir alle Datensätze über die Funktion DATEDIFF anzeigen zu lassen die z.b. 120 Tage zurückliegen, aber dabei werden auch Kunden berücksichtigt die Tabelleneinträge haben die jünger sind weil die ja auch Belege haben die älter sind als 120 Tage.

    Wie kann ich mir nur die Kunden anzeigen lassen, die z.b. Tabelleneinträge habe die 120 Tage zurück liegen und keine Tabelleneinträge haben die zwischen heute und 120 Tagen in der Vergangenheit liegen.

    Vielen Dank

    Neveda

  • #2
    Nachdem du keine genauen Angaben über die Tabellen und deren Felder gemacht hast, kann ich dir auch kein genaues Statement zeigen. Aber umgangssprachlich müsste es etwa so aussehen:

    select daten from kundentabelle where not exists
    (select beleg from belegtabelle where belegtabelle.kundennummer = kundentabelle.kundennummer and belegtabelle.belegdatum > (heute - 120 Tage) )

    bye,
    Helmut

    Comment


    • #3
      Danke für die Nachricht. Leider ist das Ergebniss noch nicht ganz so wie ich mir es vorstelle.

      Mit folgender Abfrage bin ich schon sehr nach am Ergebniss:

      select name, ort from kunden where not exists
      (select beleg_id, datum from beleg where beleg.adressnummer = kunden.nummer
      and DATEDIFF(day, datum, GETUTCDATE()) < 120
      and belegtyp = 'R')

      Di Tabelle Kunden ist eigenlich eine Standard Adresstabelle mit Kundennummer, Ort, Str, usw.

      Die Tabelle BELEG speichert alle Arten von Belegen wie Angebote, Lieferscheine, Rechnungen, Aufträge usw. Unterschieden werden die Einträge über das Feld BELEGTYP, R = Rechnung, L = Lieferschein usw. Interessieren tut mich nur der Feldtyp R. Jeder Datensatz hat auch ein Feld DATUM.

      Soweit funktioniert das auch, aber es werden auch Kunden angezeigt mit dem Belegtyp A für Angebot und das unabhängig von der Datumsdifferenz.

      Vieleicht kann mir Jemand noch einen Tipp geben.

      Vielen Dank

      Comment


      • #4
        .. dann musst du noch einschränken auf Kunden, die mindestens 1 Rechnung haben (wenn ich das richtig verstanden habe):

        select name, ort from kunden

        where exists
        (select 1 from beleg where beleg.adressnummer = kunden.nummer
        and belegtyp = 'R') -- die also mindestens 1 Rechnung haben ...

        and not exists
        (select 1 from beleg where beleg.adressnummer = kunden.nummer
        and DATEDIFF(day, datum, GETUTCDATE()) < 120
        and belegtyp = 'R') -- ... von denen die jüngste mindestens schon120 Tage alt ist

        -> wie du siehst, kannst du im select für die exist()-Prüfung angeben was du willst, ob *, 1 oder Feldnamen ist egal :-)

        bye,
        Helmut

        Comment


        • #5
          Super, vielen Dank. Hat sofort funktioniert!!! 1A Hilfe

          Comment

          Working...
          X