Announcement

Collapse
No announcement yet.

Select alle nur die 2 Hoechsten nicht

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

  • Select alle nur die 2 Hoechsten nicht

    Hallo

    habe folgendes Problem: ich moechte von einer ArtikelNummer, bei der mehrere File_IDs hinterlegt sind, alle bis auf die 2Höchsten anzeigen.
    Beispiel:
    SQL>select FILE_ID from Blubber where ARTIKELNUMMER=87922387;

    FILE_ID
    ----------
    9694
    9699
    9700
    12124
    18539
    28757
    28758
    28929
    28930

    9 rows selected.

    Eigentlich moechte ich nur 9694 bis 28758 bekommen und 28929 und 28930 nicht.

    Wie schaffe ich das?

    Gruss
    Chris

  • #2
    Hallo Chris,

    welche DB wird den verwendet? Falls eine Desktop-DB (z.B. Paradox, Access, dbase) verwendet wird und nur ein Select Statement verwendet werden darf, dann geht es nur so:
    <pre><b>
    select file_id from blubber
    where index_ < (select max(file_id) from blubber
    where index_ < (select max(file_id) from blubber))
    </pre></b>

    Diese Variante ist allerdings <FONT color=#ff0000>extrem langsam</font> da sich die Anzahl der Lesevorgänge so ca. aus dem Quadrad der vorhandenen Datensätze ergibt(falls keine zusätzliche where-Bedingung da ist).

    Besser ist in diesem Fall 3 einzelne Select's auszuführen. In den ersten beiden Select's wird jeweils der Max-Wert ermittelt, wobei im zweiten Select zusätzlich der Max-Wert kleiner sein muß als der Max-Wert aus dem ersten Select (also entsprechende where-Bedingung setzen).
    Im Dritten Select wird dann einfach der 2tgrößte Wert als einschränkende Where-Bedingung gesetzt.

    Falls ein SQL_Server zur Verfügung steht der mit StoredProc's umgehen kann die eine Ergebnismenge zurückliefern, dann könnte man innerhalb der StoredProc einfach die beiden ersten Datensätze unterdrücken. Das sollte bei den meisten SQL-Servern die mit Abstand schnellste Variante sein.

    Tschüß

    Torsten

    Tschüß

    Torste

    Comment


    • #3
      Hallo Chris,

      welche DB wird den verwendet? Falls eine Desktop-DB (z.B. Paradox, Access, dbase) verwendet wird und nur ein Select Statement verwendet werden darf, dann geht es nur so:
      <pre><b>
      select file_id from blubber
      where index_ < (select max(file_id) from blubber
      where index_ < (select max(file_id) from blubber))
      </pre></b>
      Diese Variante kann allerdings je nach verwendeter DB extrem langsam sein. Performancevorteile sollten sich bei Verwendung von auf- und absteigenden Indices ergeben. Eventuell hilft auch ein zusammengesetzter Index aus Artikelnummer + File_id.

      Unter Umständen ist es in diesem Fall besser 3 einzelne Select's auszuführen. In den ersten beiden Select's wird jeweils der Max-Wert ermittelt, wobei im zweiten Select zusätzlich der Max-Wert kleiner sein muß als der Max-Wert aus dem ersten Select (also entsprechende where-Bedingung setzen). Im Dritten Select wird dann einfach der 2tgrößte Wert als einschränkende Where-Bedingung gesetzt.

      Falls ein SQL_Server zur Verfügung steht der mit StoredProc's umgehen kann die eine Ergebnismenge zurückliefern, dann könnte man innerhalb der StoredProc einfach die beiden ersten Datensätze unterdrücken. Das sollte bei den meisten SQL-Servern die mit Abstand schnellste Variante sein.

      Tschüß

      Torste

      Comment

      Working...
      X