AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird - SELECT mit MAX / MIN Abfrage der gefundenen IDs

Firebird - SELECT mit MAX / MIN Abfrage der gefundenen IDs

Ein Thema von Tempdir · begonnen am 25. Feb 2009 · letzter Beitrag vom 16. Mär 2009
Antwort Antwort
Seite 1 von 3  1 23   
Tempdir

Registriert seit: 19. Feb 2009
Ort: Karlsruhe
84 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Firebird - SELECT mit MAX / MIN Abfrage der gefundenen IDs

  Alt 25. Feb 2009, 13:12
Datenbank: Firebird • Version: 2.1 • Zugriff über: IB-Komponenten
Hallo,

ich versuche gerade in Firebird eine Query zu bauen, welche von den gefundenen Datensätzen nur denjenigen ausgibt, dessen Primärschlüssel am kleinsten ist. Also in der Art etwa:

SELECT * FROM tabelle WHERE FIELD2='TRUEAND FIELD1=MIN(FIELD1); In der Anleitung hab ich das gefunden: Anelitung Firebird MAX/MIN aber ich bekomme es einfach nicht hin.

Zwar könnte ich folgendes machen:

SELECT MIN(FIELD1) FROM tabelle WHERE FIELD2='TRUE'; und danach dann nochmal eine Query, aber vielleicht ist da die Performance schlechter? Würde gerne die andere Möglichkeit testen.

Besten Dank!!
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
232 Beiträge
 
#2

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I

  Alt 25. Feb 2009, 13:17
Vielleicht: "Select first 1 * from tabelle where field2 = 'TRUE' order by field1" ?
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Tempdir

Registriert seit: 19. Feb 2009
Ort: Karlsruhe
84 Beiträge
 
RAD-Studio 2009 Pro
 
#3

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I

  Alt 25. Feb 2009, 13:20
Wow DANKE! Das klappt und scheint sehr flott zu sein.

Gibts noch schnellere Alternativen?
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
232 Beiträge
 
#4

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I

  Alt 25. Feb 2009, 13:22
Index auf Field1?
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.287 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I

  Alt 25. Feb 2009, 13:26
Sind Primärschlüssel nicht automatisch indexiert?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Tempdir

Registriert seit: 19. Feb 2009
Ort: Karlsruhe
84 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I

  Alt 25. Feb 2009, 13:26
Ja - Primärschlüsselindex wurde bei mir automatisch ein Index erstellt. Bei FIELD2 hab ich auch einen erstellt.
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
232 Beiträge
 
#7

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I

  Alt 25. Feb 2009, 13:30
Nützlicher als ein Index auf ein Boolsches Field2 (Selektivität = 0.5) ist sicherlich der Index auf Field1
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Tempdir

Registriert seit: 19. Feb 2009
Ort: Karlsruhe
84 Beiträge
 
RAD-Studio 2009 Pro
 
#8

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I

  Alt 25. Feb 2009, 13:38
Dem stimme ich zu, ich hab nur folgendes Problem:

Meine Tabelle enthält insgesamt 45 Spalten. Für meine Abfrage benötige ich allerdings nur FELD1 (=der Primärschlüssel, der kleinste) und FELD2 (= ein Flag, welches anzeigt ob der Datensatz schon bearbeitet wurde).

Meine Abfragen wurden deutlich schneller, als ich für FELD2 einen Index erstellt habe. Es ist übrigens ein VARCHAR(1) Feld, anscheinend gibt es keine Boolean-Felder in Firebird?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.287 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I

  Alt 25. Feb 2009, 13:42
Man kann sich aber eine Boolean-Domäne definieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
232 Beiträge
 
#10

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I

  Alt 25. Feb 2009, 13:46
Verstanden... Ich benutze statt Boolscher Felder ohnehin immer Integer (für den Fall, daß da nachher doch noch andere Werte vorkommen könnten, nobody is perfect .. und wer denkt schon zur Designzeit an wirlich Alles?) Trotzdem wirkt ein Index erst richtig gut, wenn die Selektivität möglichst niedrig wird. Selektivität ist 1 geteilt durch die Zahl der möglichen Werte. Bei nur zwei möglichen Werten ist der Nutzen nicht soooo gigantisch...
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf