Announcement

Collapse
No announcement yet.

Uniq[ue] ohne Sortierten

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

  • Uniq[ue] ohne Sortierten

    Hallo,

    ich würde gerne in MS SQL 2000 die Unix-Uniq Funktion nachbilden.
    Sagen wir, wir haben eine Tabelle

    idx val
    -----------
    1 5
    2 7
    3 8
    4 8
    5 7
    6 3
    7 3
    8 3
    9 1
    10 3
    11 5

    Wie sähe eine Query aus, die doppelte aufeinander folgende Zeilen (bezüglich val) aus, die folgende Values ohne Umsortierung liefert: 5 7 8 7 3 1 3 5 ?

    Ein einfacher DISTINCT liefert leider "zu wenig" Daten. Nach Möglichkeit bitte keine Stored Procedures.

    Danke und Gruß,
    mssqler

  • #2
    Hallo mssqler,

    [highlight=SQL]
    SELECT Main.val
    FROM Tabelle AS Main
    LEFT JOIN
    Tabelle AS SUB
    ON Main.idx = Sub.idx - 1
    WHERE Main.val <> ISNULL(SUB.val, 0)[/HIGHLIGHT]

    Setzt aber voraus, das idx fortlaufend ist.
    Sonst müsstest Du den Datensatz mit der nächst kleineren idx ermitteln.

    Olaf
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Originally posted by O. Helper View Post
      Hallo mssqler,

      [highlight=SQL]
      SELECT Main.val
      FROM Tabelle AS Main
      LEFT JOIN
      Tabelle AS SUB
      ON Main.idx = Sub.idx - 1
      WHERE Main.val <> ISNULL(SUB.val, 0)[/HIGHLIGHT]

      Setzt aber voraus, das idx fortlaufend ist.
      Sonst müsstest Du den Datensatz mit der nächst kleineren idx ermitteln.

      Olaf
      Vielen Dank. Funktioniert. Ich habe bloß nicht ganz verstanden, warum auch drei aufeinanderfolgende gleiche Zahlen zu einer werden, was ja eigentlich nur durch eine Iteration funktioniert.

      Comment


      • #4
        Ganz einfach, es werden nur die Zeilen ausgegeben, bei denen der Vorgänge (über idx) einen anderen Wert hat.
        Deswegen können beliebig viele gleiche Zahlen aufeinandere folgen, zurückgeliefert wird nur der erste.

        Olaf
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment

        Working...
        X