Announcement

Collapse
No announcement yet.

Count mit Bedingung

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

  • Count mit Bedingung

    Hallo zusammen,

    erstmal vorne weg, ich find euer Forum echt super und es hat mir schon viele Lösungsansätze geboten.

    Hier mein Problem

    Ich habe eine Datenbank mit 3 relevanten Tabellen ... Adressen(ID), Kontakte(ID, ID_Adressen[FK-Adressen], Status[FK-Ergebnisse]) , Ergebnisse(Ergebnisse, ID)
    Es gibt zu jeder Adresse mehrere Kontakte wo jeweils jeder Kontakt ein Ergebnis hat.
    Jetzt möchte ich gerne die Anzahl der Ergebnisse in der Tabelle Kontakte zählen um den aktuellen Status zu erfahren (Bedingung ist allerdings
    das pro Adresse nur der aktuellste Kontakt gezählt wird).

    mein Code sieht wie folgt aus

    Code:
    SELECT ergebnisse.ergebnisse, count(*) AS Summe FROM Kontakte
    INNER JOIN ergebnisse ON ergebnisse.id = kontakte.status
    GROUP BY ergebnisse.ergebnisse
    WITH ROLLUP
    Das funktioniert soweit auch, allerdings bringt er mir so einfach alle Kontakte die in der DB existieren.
    Ich möchte jedoch nur das pro Adresse nur der aktuellste Kontakt zählt. Und da komme ich einfach nicht
    weiter.

    Ist vielleicht jemand von euch so nett und könnte mir helfen, evtl einen Lösungsansatz oder (ich trau mich garnicht es auszusprechen) die Lösung?

    Vielen vielen Dank

    Grüße
    PHP Code:
    <?php while(!$weekend) { 
    jumpToNextDay();  } ?>

  • #2
    Hallo,

    Lösungsansätze wie man den Ältesten/Neuesten oder allgemein von mehreren Gleichen nur einen auswählt, findest du hier: Bei "doppelten" Datensätzen nur einen anzeigen

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Problem gelöst

      vielen Dank für deinen Hinweis ... der hat mir sehr weitergeholfen. Ich konnte mein Problem jetzt
      wie folgt lösen =) ... (allerdings über ein paar umwege, aber ist ja egal ... nur das Ergebnis zählt)

      Code:
      BEGIN
      		DELETE FROM zzz_reports
      END
      
      BEGIN
      		INSERT INTO zzz_reports (id, id_fa, ergebnisse, datum)
      		select kon.id, kon.id_fa, erg.ergebnisse, kon.datum  from kontakte_comf kon
      		inner join ergebnisse erg on erg.id = kon.status
      		where kon.datum = (
      					    select max(kon_b.datum) from kontakte_comf kon_b
      					    where kon_b.id_fa = kon.id_fa
      					   )
      END
      
      BEGIN
      		SELECT ergebnisse, count(*) FROM zzz_reports
      		GROUP BY ergebnisse
      		WITH rollup
      END
      Ich habe mit Hilfe von deinem Beitrag nur die aktuellsten Kontakte ausgewählt und diese in eine Tabelle zzz_reports geschrieben.
      Auf diese wiederum habe ich dann die eigentliche Abfrage gemacht ... und tata Problem gelöst

      Nochmals vielen Dank für deinen Lösungsansatz, hat mir sehr geholfen.

      Grüße
      Flo
      PHP Code:
      <?php while(!$weekend) { 
      jumpToNextDay();  } ?>

      Comment


      • #4
        Hallo,
        wenn du jetzt die Quelle für zzz_reports als Inline-View in deiner Abfrage verwendest, dann kannst du dir den Umweg über diese Zwischentabelle sparen.

        [highlight=sql]
        SELECT erg.ergebnisse, count(*)
        FROM (
        select kon.id, kon.id_fa, erg.ergebnisse, kon.datum
        from kontakte_comf kon
        inner join ergebnisse erg on erg.id = kon.status
        where kon.datum = (
        select max(kon_b.datum)
        from kontakte_comf kon_b
        where kon_b.id_fa = kon.id_fa
        )
        ) as erg
        GROUP BY ergebnisse
        WITH rollup
        [/highlight]

        Gruß Falk
        Zuletzt editiert von Falk Prüfer; 27.09.2012, 08:53.
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Hi,
          ich hab es mal mit deiner Methode versucht (Interesse halber) hat allerdings nicht funktioniert ... ich bekomme folgende Fehlermeldung:

          Meldung 156, Ebene 15, Status 1, Zeile 11
          Falsche Syntax in der Nähe des 'GROUP'-Schlüsselwortes.
          Meldung 319, Ebene 15, Status 1, Zeile 12
          Falsche Syntax in der Nähe des WITH-Schlüsselwortes. Falls diese Anweisung ein allgemeiner Tabellenausdruck oder eine XMLNAMESPACES-Klausel ist, muss die vorherige Anweisung mit einem Semikolon abgeschlossen werden.


          Die fehlende schließende Klammer vor Group By habe ich schon entdeckt und ergänzt.

          Grüße
          Flo
          PHP Code:
          <?php while(!$weekend) { 
          jumpToNextDay();  } ?>

          Comment


          • #6
            Hallo,

            ja stimmt, da fehlt eine schliessende Klammer. Hab auch mal noch einen Alias für die Inline-View ergänzt. Ansonsten wüsste ich jetzt nicht wo dort noch ein Syntaxfehler sein sollte.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Hi,

              supi ... mit dem alias funktioniert´s

              Grüße
              Flo
              PHP Code:
              <?php while(!$weekend) { 
              jumpToNextDay();  } ?>

              Comment

              Working...
              X