Announcement

Collapse
No announcement yet.

Den ersten Eintrag finden

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

  • Den ersten Eintrag finden

    Hallo,

    so langsam lerne ich SQL immer besser kenne, scheitere aber noch an einem einfachen Problem ;-(

    Ich möchte den ersten Eintrag in einer Gruppe herausfinden:


    [
    Code:
    WITH  Data1 (Gruppe1, ID, Name) AS 
       (  SELECT 100, 1, 'Name1' UNION ALL
          SELECT 100, 2, 'Name2' UNION ALL
          SELECT 101, 1, 'Name3' UNION ALL
          SELECT 102, 1, 'Name4' UNION ALL
          SELECT 102, 2, 'Name5' UNION ALL
          SELECT 103, 1, 'Name6'
        )
    SELECT   Gruppe1, ID, Name 
    FROM Data1

    Resultat soll sein:

    100, 1, 'Name1'
    101, 1, 'Name3'
    102, 1, 'Name4'
    103, 1, 'Name6'

    Viele Grüße
    PS: Gibt es keine Literatur, welche mir das Thema sehr gut beibringen kann? Ich muss bei diesem Thema wohl etwas an die Hand genommen werden ;-)

  • #2
    http://sql.1keydata.com/de/sql-order-by.php

    Bedingung id=1 in der where-Kausel einsetzen
    Zuletzt editiert von Christian Marquardt; 08.11.2011, 11:45.
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      http://sql.1keydata.com/de/sql-order-by.php

      Bedingung id=1 in der where-Kausel einsetzen
      Minimum müsste ja nicht immer die 1 sein...

      [HIGHLIGHT="SQL"]WITH Data1 (Gruppe1, ID, Name) AS
      ( SELECT 100, 1, 'Name1' UNION ALL
      SELECT 100, 2, 'Name2' UNION ALL
      SELECT 101, 1, 'Name3' UNION ALL
      SELECT 102, 1, 'Name4' UNION ALL
      SELECT 102, 2, 'Name5' UNION ALL
      SELECT 103, 1, 'Name6'
      )

      SELECT D.Gruppe1, D.ID, D.Name
      FROM Data1 AS D
      JOIN ( SELECT MIN (ID) AS Min_ID
      , Gruppe1
      FROM Data1 AS DI
      GROUP BY Gruppe1
      ) AS X ON X.Min_ID = D.ID
      AND X.Gruppe1 = D.Gruppe1 [/HIGHLIGHT]

      Comment


      • #4
        Hallo,
        Originally posted by Laie View Post
        ...Ich möchte den ersten Eintrag in einer Gruppe herausfinden:
        Weils ein immerwiederkehrendes Thema ist, gibts dafür einen eigenen, 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


        • #5
          Geht bei "guten" DBMS einfachsten per Rank()

          [HIGHLIGHT="SQL"]WITH Data1 (Gruppe1, ID, Name) AS
          ( SELECT 100, 1, 'Name1' UNION ALL
          SELECT 100, 2, 'Name2' UNION ALL
          SELECT 101, 1, 'Name3' UNION ALL
          SELECT 102, 1, 'Name4' UNION ALL
          SELECT 102, 2, 'Name5' UNION ALL
          SELECT 103, 1, 'Name6'
          )
          SELECT
          Gruppe1,
          ID,
          Name
          FROM (
          SELECT
          Gruppe1,
          ID,
          Name
          ,RANK() OVER
          (PARTITION BY Gruppe1 ORDER BY ID) AS rnk
          FROM Data1
          ) x
          WHERE rnk = 1[/HIGHLIGHT]

          (Hier noch verschachtelt in ein Derived Query)

          Comment

          Working...
          X