Schwierigkeiten mit Select

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

  • Schwierigkeiten mit Select

    Hallo,

    leider komme ich mit nachfolgendem Select nicht weiter:

    ich habe 2 Tabellen
    tabelle1: KdNr / Vorname / Nachname / RKZ (KdNr primary key und RKZ unique).
    tabelle 2: AnfNr / RKZ / AnfrageDatum (AnfNr primary key)

    In Tabelle 1 stehen die Kunden drin und in Tabelle 2 die zugehörigen Anfragen, verknüpt über RKZ. Jetzt möchte ich über einen Select alle Anfragen eines Kunden innerhalb der letzten 7 Tage. Mit nachfolgendem Select erhalte ich alle Kunden welche Anfragen innerhalb der letzten 7 Tage getätigt haben, jedoch werden die Kunden, welche keine Anfragen tätigten nicht aufgeführt, was jedoch sein soll. Die Ausgabetabelle soll z.B. sein:
    Kund 1 - 30 Anfragen
    Kunde 2 - 15
    Kunde 3 - 0

    jedoch wird der Kunde 3 nicht aufgeführt mit nachfolgendem Select, was ich jedoch möchte. Weiß hier jemand weiter?

    select tabelle1.RKZ, $tabelle2.RKZ, COUNT(AnfNr) AS SUM from tabelle1 LEFT JOIN tabelle2 ON tabelle1.RKZ = tabelle2.RKZ
    WHERE (tabelle2.UebermitDatum >= CURDATE() - INTERVAL 7 DAY) group by tabelle2.RKZ order by ...");

  • #2
    Re: Schwierigkeiten mit Select

    diese anforderung
    Jetzt möchte ich über einen Select alle Anfragen eines Kunden innerhalb der letzten 7 Tage.
    schliesst doch die folgende
    jedoch werden die Kunden, welche keine Anfragen tätigten nicht aufgeführt, was jedoch sein soll.
    eigentlich aus, oder ...?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Comment


    • #3
      tabelle2.UebermitDatum >= CURDATE() - INTERVAL 7 DAY
      wie soll das erfüllt werden wenn da nichts drinsteht???
      aber du könntest ein OR tabelle2.UebermitDatum is null machen
      ach btw group by immer nach allen single cols...
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Comment


      • #4
        das widerspricht sich nicht, denn ich möchte auch die Information, welche Kunden in diesen letzen 7 Tagen keine Anfragen getätigt haben namentlich in der Tabelle aufgeführt haben mit der Anzahl 0.
        Da nicht jedem Eintrag in der Tabelle1 ein Eintrag in Tabelle 2 über RKZ zugeordnet ist, habe ich ja einen LEFT JOIN verwendet. Ohne die Bedingung
        tabelle2.UebermitDatum >= CURDATE() - INTERVAL 7 DAY
        bekomme ich alle Kunden angezeigt, so wie gewünscht, JEDOCH NICHT der letzten 7 Tage sondern über die letzten Jahre! Füge ich diese 7 - Tage-Bedingung hinzu fallen mir die Kunden raus welche nichts angefragt hatten, wobei ich wie gesagt diese Info benötige.
        .... or ($tabellezk3.UebermitDatum) is null ... oder
        .... or ISNULL(($tabellezk3.UebermitDatum)

        habe ich schon ausprobiert, aber hat nichts genützt.

        Comment


        • #5
          Original geschrieben von Ralf
          das widerspricht sich nicht, denn ich möchte auch die Information, welche Kunden in diesen letzen 7 Tagen keine Anfragen getätigt haben namentlich in der Tabelle aufgeführt haben mit der Anzahl 0.
          das ist aber trotzdem eine andere anforderung als die, die du vorher definiert hattest,
          Jetzt möchte ich über einen Select alle Anfragen eines Kunden innerhalb der letzten 7 Tage.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Comment


          • #6
            also, dies hier stimmt, hab mich zu Beginn wohl etwas ungeschickt ausgedrückt, sorry

            das widerspricht sich nicht, denn ich möchte auch die Information, welche Kunden in diesen letzen 7 Tagen keine Anfragen getätigt haben namentlich in der Tabelle aufgeführt haben mit der Anzahl 0.
            Gibts hierfür eine Lösung, oder sehe ich hier den Wald vor lauter Bäumen nicht mehr

            Comment


            • #7
              woher kommt das UebermitDatum ?

              Das ist ganz oben in den Tabelle-Definitionen gar nicht erwähnt.
              hopka.net!

              Comment


              • #8
                Das UebermitDatum muß natürlich AnfrageDatum heißen

                Comment


                • #9
                  Ich habe das Select nun erweitert mit ... or (tabelle2.AnfrageDatum = NULL) ...

                  so daß ich nun nachfolgende Select-Anweisung habe:
                  select tabelle1.RKZ, $tabelle2.RKZ, COUNT(AnfNr) AS SUM from tabelle1 LEFT JOIN tabelle2 ON tabelle1.RKZ = tabelle2.RKZ WHERE (tabelle2.AnfrageDatum >= CURDATE() - INTERVAL 7 DAY) or (tabelle2.AnfrageDatum = NULL) group by tabelle2.RKZ order by ...");

                  Jedoch werden die Kunden, welche keine Einträge in der tabelle2 haben, das heißt keine Anfragen innerhalb der letzten 7 Tage getätigt haben, immer noch nicht ausgegeben.

                  Comment


                  • #10
                    Hallo,

                    ich habe nun eine Lösung gefunden, welche ich hier gerne weitergeben möchte, für all diejenigen, welche auf ein ähnliches Problem treffen:

                    select tabelle1.*, tabelle2.*, COUNT(NULLIF(tabelle2.AnfrageDatum >= CURDATE() - INTERVAL 7 DAY,0)) AS SUM
                    from tabelle1 LEFT JOIN tabelle2 USING (RKZ)
                    group by tabelle1.RKZ
                    order by SUM DESC

                    Die Kunden aus Tabelle 1, welche keine Anfragen gestellt hatten innerhalb der letzten 7 Tage wurden deshalb nicht ausgegeben, da ich auf tabelle2.RKZ referenziert hatte.

                    Gruß Ralf

                    Comment

                    Working...
                    X