Announcement

Collapse
No announcement yet.

Neusten Datensatz wählen

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

  • Neusten Datensatz wählen

    Hallo!

    Habe folgendes Problem:

    Tabelle A mit ID
    Tabelle B mit ID, SubID, Wert, Datum.

    +------+----------+-------+---------+
    | id | subid | wert | datum |
    +------+----------+-------+---------+
    |1 |2 |10 | 1.2 |
    |1 |2 |20 | 4.2 |
    |1 |3 | 1 | 4.9 |
    |1 |4 | 2 | 2.9 |


    Ich möchte zu jeder ID aus Tabelle A den neuesten Wert, zu jeder SubID

    Das Problem dabei ist dass weder id noch subid eindeutig sind, d.h. zu jeder ID kann es mehrer SubIDs geben.
    Von diesen Einträgen möchte ich nur den Neuesten.

    Ich würde die Tabelle gerne vorselektieren, wenn ich allerdings einen Subselect mache, dann komme ich nicht an den Wert, da ich diesen in die Group By Klausel schreiben muss... (wieso eigentlich?)

    SELECT id,subid,MAX(datum)

    FROM B

    GROUP BY id,subid

    Alternativ könnte ich statt dem Wert mit dem neuesten Datum auch den höchsten Wert nehmen.

    Hat jemand ne Idee?
    Bin echt am verzweifeln...

  • #2
    Meinst du etwa sowas:
    Code:
    select distinct a.id, b.subid, (select top 1 b2.wert from Tabelle_B b2
      where b2.id = b.id and b2.subid = b.subid
      order by b2.datum desc) as wert
      from Tabelle_A a
      left join Tabelle_B b on b.id = a.id
    Wenn nur ID's aus Tabelle A verwendet werden sollen, die auch mindestens einen Eintrag in Tabelle B haben, einfach statt "left join" nur "join" verwenden.

    bye,
    Helmut

    Comment


    • #3
      hallo helmut!

      Ich glaube nicht, dass das passt muss allerdings zugeben dass ich manche Sachen nicht 100%ig verstehe. Evtl. waren das auch Tippfehler...
      Vielleicht kannst Du mir das ja noch etwas genauer erklären

      Der Teil

      Code:
      (select top 1 b2.wert from Tabelle_B b2
       where b2.id = b.id and b2.subid = b.subid
        order by b2.datum desc) as wert
      wirft bei mir einige Fragen auf:

      -Welche Tabelle ist b2 und welche Tabellle_B?
      -Was genau soll die Abfrage bewirken?

      Nochmal zu dem was ich erreichen wollte:

      Ich möchte zur ID 1 nur den Wert mit dem aktuellesten Datum joinen.
      Mit einem "normalen" Join bekomme ich ja zwei Zeilen:

      1 2 10
      und
      1 2 20

      dabei möchte ich aber nur 1 2 20 dort stehen haben...

      Dankeschön!
      shor

      Comment


      • #4
        b2 ist einfach ein Alias für Tabelle_B - aber das sind Datenbank-Grundlagen, ohne die man keine etwas komplexeren Abfragen erstellen kann. Falls nicht bekannt, gleich mal nachlesen, zB hier: http://www.sql-und-xml.de/sql-tutori...von-daten.html
        Und meine Abfrage hat, bezogen auf deine Beispieldaten, kein "1 2 10" im Ergebnis. Ich habe das im QueryAnalizer mit deinen Beispieldaten getestet, im angezeigten Code sind keine Tippfehler. Du müsstest das nur mal ausprobieren. Ich kann dir nicht weiterhelfen, solange du meine Lösung nicht verwendest und konkret sagst, was am Ergebnis meiner (und nicht deiner) Abfrage falsch ist.

        bye,
        Helmut

        Comment


        • #5
          Hallo!

          Konnte das erst heute ausprobieren.
          Also, ich dachte da wäre ein Tippfehler weil da kein AS vor dem Tabellenalias kam. Die Datenbank-Grundlagen sitzen schon so einigermaßen!

          Den Rest nehme ich zurück, ich hatte mich noch nicht mit dem Schlüsselwort TOP befasst - das tut dann im Endeffekt genau das, was ich möchte!

          Also nochmal vielen Dank! *handschüttel*

          Bis Bald,
          shor

          Comment


          • #6
            Freut mich, dass du es umsetzen konntest

            ciao,
            Helmut

            Comment

            Working...
            X