Announcement

Collapse
No announcement yet.

SQL Abfrage mit DISTINCT filtern

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

  • SQL Abfrage mit DISTINCT filtern

    Hallo ich bin neu hier und totaler SQL-Dummy.

    Ich habe ein kleines, vermutlich banales, Problem mit einer Abfrage.

    Folgende Abfrage gibt die komplette Tabelle aus:
    [highlight=sql]SELECT "Name", "Text", "Groesse", "Datum", "Zeit" FROM "Tabelle"[/highlight]

    Das Ergebnis ist eine Tabelle mit 58534 Datensätzen.

    Ich muss die Tabelle so filtern, das "Name" jeweils nur einmal auftaucht und nur die Datensätze mit dem jüngsten Datum zurück gegeben werden.

    Folgende Abfrage gibt zwar nur noch ca. 16670 Datensätze aus, es fehlen aber "Text", "Groesse", "Datum" und "Zeit":
    [highlight=sql]SELECT DISTINCT "Name" FROM "Tabelle"[/highlight]

    Diese Abfrage gibt alle Datensätze zurück, da alle Datensätze unterschiedlich sind:
    [highlight=sql]SELECT DISTINCT "Name", "Text", "Groesse", "Datum", "Zeit" FROM "Tabelle"[/highlight]

    Wie verändere ich die Abfrage so, das DISTINCT nur auf "Name" angewendet wird, aber alle Spalten und nur die Datensätze mit dem jüngsten Datum zurück gegeben werden?


    Danke fürs lesen, Uwe

    PS. Ach so, ich versuche das gerade mit BASE von Libre Office
    Zuletzt editiert von Uwe-W; 08.09.2011, 11:39.

  • #2
    Hallo,
    Da es ein häufiges Problem ist, gibt es dafür extra einen angepinnten Thread: 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
      Jepp, habe ich inzwischen auch gefunden und folgendes probiert:
      [highlight=sql] SELECT "a"."ID", "a"."Name", "a"."Text", "a"."Groesse", "a"."Datum", "a"."Zeit"
      FROM "Tabelle" "a"
      LEFT OUTER JOIN "Tabelle" "b" ON "b"."Name" = "a"."Name" AND "b"."Datum" > "a"."Datum"
      WHERE "b"."Datum" IS NULL[/highlight]

      BASE meldet keinen Fehler, gerät beim Aufruf aber offenbar in eine Endlosschleife (minutenlange CPU-Auslastung von 100%)

      Außerdem habe ich folgendes probiert:
      [highlight=sql]
      SELECT MAX( "a"."ID" ) "ID", "a"."Name", "a"."Text", "a"."Groesse", "a"."Datum", "a"."Zeit"
      FROM "Tabelle" "a"
      WHERE "a"."Datum" = (
      SELECT MAX( "b"."Datum" )
      FROM "Tabelle" "b"
      WHERE "b"."Name" = "a"."Name"
      )
      GROUP BY "a"."Name", "Datum"
      [/highlight]
      enthält irgendeinen SyntaxFehler den ich einfach nicht finden kann (Not in aggregate function or group by clause ...). Der Ausdruck [highlight=sql]
      ... MAX( "a"."ID" ) "ID" ...
      [/highlight] scheint BASE nicht zu gefallen.

      Nochwas: Ich habe der obigen Tabelle zwischendurch ien Primärschlüssel (ID) hinzugefügt.

      Danke für deine Hilfe, Uwe
      Zuletzt editiert von Uwe-W; 08.09.2011, 13:12.

      Comment

      Working...
      X