Announcement

Collapse
No announcement yet.

Korrekte SQL Syntax mit Join

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

  • Korrekte SQL Syntax mit Join

    Ich habe in einer Tabelle folgenden Inhalt:
    Datum / Content
    1.1.08 / W
    2.1.08 / S
    3.1.08 / S
    4.1.08 / W
    5.1.08 / S
    6.1.08 / F
    7.1.08 / F
    8.1.08 / S
    9.1.08 / W

    1. Ich möchte die Anzahl der "S" Zyklen zählen.
    2. Wenn zwischen zwei "S" ein oder mehrere "F" stehen soll das als ein Zyklus betrachtet werden.

    Also in dem obigen Fall wären das zwei Zyklen und nicht drei.
    Wie kann man soetwas mit SQL lösen?

    Das Thema wurde schon in einem anderen Forum behandelt und dankenswerterweise haben mir dort schon einige versucht zu helfen. Leider funktioniert es noch nicht und wir kommen bis jetzt nicht richtig zum Ziel.

    siehe dort ->
    http://www.delphipraxis.net/topic132...sqlbefehl.html

    Vielleicht gibt es hier noch jemand der noch eine andere Idee hat.
    Ich freue mich über alle Hinweise.
    Dirk

  • #2
    Dem Kommentar Manchmal sind die Tabellen- bzw. Datenkonstrukte nicht geeignet, um effektive Auswertungen fahren zu können ist eigentlich nichts mehr hinzuzufügen. Selbst wenn Dir ein geschickter SQL gelingt, kann es sein, dass dieser sehr langsam ist oder bei geringster Änderung der Anforderung total neu entwickelt werden muss. Sofern es sich um MSSQL handelt, könntest Du in einer StoredProc durchaus eine Schleife laufen lassen...
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo,

      sehe ich auch so wie Mario.Noack. Das Datenmodell gibt keine eindeutige Beziehung zwischen einem Anfangs-S und einem End-S her - außer der durch das Datum vorgegebenen Reihenfolge und das ist Mengenorientiert (also mit SQL) nicht lösbar. Hier hilft nur eine Prozedur, die den Cursor seriell von Anfang zum Ende durchackert und die Zyklen zählt. Aber spätestens wenn ein Zyklus nur einen Tag dauert wirds auch hier wischiwaschi - was ist dann der Anfang und was das Ende ?
      Fazit: Je nachdem wie wichtig die (korrekte) Zählung der Zyklen ist sollte man hier besser über eine Änderung des Datenmodells nachdenken.

      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


      • #4
        Originally posted by Falk Prüfer View Post
        Hallo,

        sehe ich auch so wie Mario.Noack. Das Datenmodell gibt keine eindeutige Beziehung zwischen einem Anfangs-S und einem End-S her - außer der durch das Datum vorgegebenen Reihenfolge und das ist Mengenorientiert (also mit SQL) nicht lösbar. Hier hilft nur eine Prozedur, die den Cursor seriell von Anfang zum Ende durchackert und die Zyklen zählt. Aber spätestens wenn ein Zyklus nur einen Tag dauert wirds auch hier wischiwaschi - was ist dann der Anfang und was das Ende ?
        Fazit: Je nachdem wie wichtig die (korrekte) Zählung der Zyklen ist sollte man hier besser über eine Änderung des Datenmodells nachdenken.

        Gruß Falk
        Zumindestens eines kann man als "Regel" definieren. Nach maximal 7 "S" kommt auf jeden Fall zwei oder drei "F".
        Das heißt also, zwischen zwei "F" Zyklen sind immer 7 Tage. Ich dachte man kann irgendwie diese 7 Tage nacheinander (Verzweigung) durchlaufen und nach dem nächsten "S" suchen. Wenn zwischen dem aktuellen "S" und vor dem nächsten "S" ein "F" steht (und nichts anderes) dann -> ein Zyklus.

        Mit dem Joins und dem a.date=b.date+1 Vergleichen passiert doch eigentlich nichts anderes.
        Kann man mehrere Joins nicht dann bis a.date='x'.date+7 miteinander "verknoten"?
        Ich fand nur nicht die richtige Syntax - oder es ist, wie ihr sagt, einfach nicht lösbar. :-(
        Dirk

        Comment


        • #5
          Originally posted by d6lpz View Post
          ...Ich fand nur nicht die richtige Syntax - oder es ist, wie ihr sagt, einfach nicht lösbar. :-(
          Hallo Dirk,

          aus meiner Sicht ist es mit Joins nicht lösbar. Ein Join (eine Verknüpfung) geht von einem relationalen Datenmodell aus, sprich die Datensätze einer oder mehrerer Tabellen stehen miteinander in RELATION (in Beziehung). Bei dir gibt es keine Beziehung (Relation) zwischen den Datensätzen die man mit SQL verbinden (joinen) könnte.
          Die durchaus vorhandene logische Beziehung mit deinem 7-Tage-Rythmus kannst du sicherlich mit Programmlogik und entsprechenden Fallunterscheidungen implementieren. Je nach DBMS kann diese Prozedur ja auch innerhalb der DB liegen.

          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


          • #6
            Originally posted by Falk Prüfer View Post
            Hallo Dirk,

            aus meiner Sicht ist es mit Joins nicht lösbar. Ein Join (eine Verknüpfung) geht von einem relationalen Datenmodell aus, sprich die Datensätze einer oder mehrerer Tabellen stehen miteinander in RELATION (in Beziehung). Bei dir gibt es keine Beziehung (Relation) zwischen den Datensätzen die man mit SQL verbinden (joinen) könnte.
            Die durchaus vorhandene logische Beziehung mit deinem 7-Tage-Rythmus kannst du sicherlich mit Programmlogik und entsprechenden Fallunterscheidungen implementieren. Je nach DBMS kann diese Prozedur ja auch innerhalb der DB liegen.

            Gruß Falk
            Ich werde es mit Programm Code versuchen zu lösen. Oder, da der Report dann über eine Exportfunktion nach Excel läuft, vielleicht in Excel selbst auseinander röteln.
            Ich danke trotzdem allen für ihre Bemühungen!
            Dirk

            Comment

            Working...
            X