Announcement

Collapse
No announcement yet.

Knobelspaß

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

  • Knobelspaß

    Hallo Leute,

    ich hab mal eine Frage an kreative SQL-Köpfe.
    Folgende Bsp-Tabelle beschreibt Bohrungsmarker.

    [MID] [FK_BID] [Name] [Tiefe]
    1 1 Sand 50
    2 1 Sand 60
    3 1 Sand 70
    4 2 Granit 50
    5 2 Gneis 60
    6 2 Granit 70

    Gleichnamige zusammenhängede Marker sollen zum tiefsten zusammengefasst werden.
    Zielergebnis also:

    [MID] [FK_BID] [Name] [Tiefe]
    3 1 Sand 70
    4 2 Granit 50
    5 2 Gneis 60
    6 2 Granit 70

    Meine Idee war bisher:
    Code:
    SELECT M.FK_BID, MID, Name, M.Tiefe 
    FROM marker AS M INNER JOIN 
    	(SELECT FK_BID, MAX(Tiefe) AS Tiefe
    	FROM marker
    	GROUP BY BID, Name
    	ORDER BY BID,Tiefe) AS X
    	ON (M.BID = X.BID AND M.TIEFE = X.TIEFE)
    Subquerie also im FROM-Block. Gefällt mir nur sekundär.
    Außerdem gibt es hier die Einschränkung, dass in einer Bohrung eine Schicht nur einmal vorkammen darf. Gennante Abfrage liefert also zu obigen Bsp:

    [MID] [FK_BID] [Name] [Tiefe]
    3 1 Sand 70
    5 2 Gneis 60
    6 2 Granit 70

    Wäre okay, gefällt mir aber nur bedingt.
    Hat jmd ne bessere Idee?

    Liebe Grüße,
    Jan.
    Zuletzt editiert von Ka55i0peia; 22.02.2010, 19:19. Reason: nähere Eläuterung & Tippfehler

  • #2
    Hallo,

    diese Art von Abfrage läßt sich nur mit Subqueries lösen. Einmal wie von dir im FROM-Teil (das ORDER BY in der Subquery ist überflüssig) und einmal in der WHERE-Klausel.

    [highlight=sql]
    SELECT M.FK_BID, M.MID, M.Name, M.Tiefe
    FROM marker AS M
    where (M.FK_BID, M.Name, M.Tiefe) in (
    select I.FK_BID, I.Name, MAX(Tiefe)
    from marker I
    GROUP BY I.FK_BID, I.Name
    )
    [/highlight]

    Gruß Falk

    P.S.: Das GROUP BY BID, Name habe ich als Schreibfehler angesehen - sollte bestimmt GROUP BY FK_BID, Name heißen.
    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
      Hi,

      wenn die Zeile mit der höchsten MID auch immer die größte Tiefe hat, dann geht auch Folgendes:

      [highlight=sql]
      SELECT MAX(MID), FK_BID, Name, MAX(Tiefe)
      FROM marker
      GROUP BY FK_BID, Name
      [/highlight]

      Ansonsten ist die Lösung von Falk Prüfer natürlich besser.
      "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

      Viele Grüße Novi

      Comment


      • #4
        Dankes ehr!

        Vielen Dank für Eure Antworten!!


        @Falk Prüfer: Dass ein Binden von mehreren Spalten mittels WHERE möglich ist wusste ich nicht.

        TOP!
        Grüße,
        derJan.

        Comment

        Working...
        X