Announcement

Collapse
No announcement yet.

Frage zu Subselect

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

  • Frage zu Subselect

    Hallo,

    ich habe eine Frage zu einem Subselect:

    Tabelle A enthält Buchungsdaten mit Umsatzwerten
    Tabelle B entält die Historie der Änderungen der Tabelle A
    Tabelle C enthält das Datum der Änderungen (Feld LastEdit) zu den Einträgen in der Tabelle B.

    Tabelle B kann mehrere Einträge zu einer Zeile der Tabelle A haben.

    Wie erhalte ich nun die letzte Änderung eines Eintrages aus der Tabelle B ?

    Es muss mit einem Subselect der Tabelle C gehen, aber ich bekomme es nicht hin. (select max (LastEdit) from Tabelle C...)

    Danke für Eure Hilfe.

    Christian
    Zuletzt editiert von sql; 05.03.2008, 12:34.

  • #2
    genauer

    d.h. Tabellen definition aller 3 Tabellen
    wie CREATE TABLE #TabelleA (id INT, ... )
    Beispiel-daten gleich mit Insert
    wie INSERT INTO #TabelleA VALUES (1,...)

    usw.

    und dann auch noch Dein Statement.

    dann bekommst Du eher eine Lösung...

    Comment


    • #3
      Beschreibung der Tabellen (Auszuug)

      Tabelle A:
      guid
      Kunde nvarchar
      Auftragssumme decimal

      Tabelle B:
      die gleichen Felder wie in Tabelle A

      Tabelle C:
      GUID aus der Tabelle A/B
      User string
      lastedit datetime


      Vor dem speichern einer Änderung eines Datensatzes in der Tabelle A wird der Datensatz aus der Tabelle A in die Tabelle B inserted.

      Danach wird in die Tabelle C das Datum der letzten Änderung und die GUID des Datensatzes aus der Tabelle A/B inserted.

      Ich möchte jetzt die letzte gespeicherte Änderung eines Datensatzes auslesen.


      Ich hoffe diese Informatioenn reichen aus.
      Zuletzt editiert von sql; 05.03.2008, 13:04.

      Comment


      • #4
        Ich denke mal da stimmt was nicht oder es fehlt noch etwas, da man in Tabelle B aufgrund des Aufbaues keine historische Reihenfolge nachvollziehen kann. Die guid ist wohl die von Tabelle A, sonst hätte man ja keinen Bezug zum aktuellen Datensatz. Und wenn das so ist, hat jeder Datensatz einer Änderung dieselbe guid. Diese verbindet wahrscheinlich wiederum zu Tabelle C. Jetzt gibt es da zwar verschiedene Einträge In Tabelle B und C, ich weiß aber nicht mehr, welcher Eintrag aus Tabelle C zu welchem in Tabelle B gehört, sobald mehr als eine Änderung zu einem Datensatz gemacht wurde.
        Meiner Ansicht nach gehören die Felder User und lastedit in Tabelle B dazugehängt und Tabelle C kann man ganz streichen.

        bye,
        Helmut

        Comment


        • #5
          Stimmt ich hatte in der Tabelle B ein Feld vergessen:

          Beschreibung der Tabellen (Auszuug)

          Tabelle A:
          guid
          Kunde nvarchar
          Auftragssumme decimal

          Tabelle B:
          VersionsGuid
          sonst die gleichen Felder wie in Tabelle A

          Tabelle C:
          VersionsGuid aus der Tabelle B
          GUID aus der Tabelle A/B
          User string
          lastedit datetime


          Wie muss ich die Abfrage bauen, damit ich mir den jeweils zuletzt geänderten Datensatz aus der Tabelle B ausgeben lassen kann. In der Tabelle B können mehrere History-Einträge je Datensatz der Tabelle A stehen.
          Zuletzt editiert von sql; 05.03.2008, 16:00.

          Comment


          • #6
            Verstehe ja nicht, warum man das so kompliziert mit einer weiteren Tabelle aufbaut anstatt Username und Datum gleich in Tabelle B anzuhängen, aber so sollte es zB gehen (ungetestet):
            Code:
            select * from tabelle_B b1 where b1.versionsGuid =
              (select top 1 c1.versionsGuid from tabelle_C c1 where c1.guid = b1.guid
              order by c1.lastedit desc)
            bye,
            Helmut

            Comment


            • #7
              So hatte ich es vorher auch probiert, ich erhalte aber trotzdem alle Datensätze und nicht nur die aktuellsten ?!
              Zuletzt editiert von sql; 06.03.2008, 12:24.

              Comment


              • #8
                Dann mache mal einen "UNIQUE KEY" auf versionsGuid in den beiden Tabellen B und C. Wenn das nicht geht, weil es Duplikate gibt, dann musst du mir mal erklären, wie die eindeutige Beziehung zwischen einem Datensatz in Tabelle B und dem dazugehörenden Datensatz in Tabelle C hergestellt wird. Ansonsten müsste diese Abfrage funktionieren und irgendwas anderes passt noch nicht.

                bye,
                Helmut

                Comment

                Working...
                X