AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Abfrage

Ein Thema von hoika · begonnen am 22. Sep 2006 · letzter Beitrag vom 22. Sep 2006
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

SQL-Abfrage

  Alt 22. Sep 2006, 09:01
Datenbank: FB • Version: 1.5 • Zugriff über: wurscht
Hallo,

ich habe folgende Tabelle

create table test(id integer, reportid integer, personalid integer)
mit folgenden Werten

11, 1, 1
12, 1, 1
13, 1, 1
14, 1, 2
15, 1, 2
16, 2, 1
16, 2, 1

Das ist nicht die vollständige Tabelle, es werden pro Report und Person
mehrere werte gespeichert.

Ich benötige jetzt pro Report nur einmal die PersonalId
Ergebnis soll also sein

reportid, personalid
1, 1
1, 2
2, 1

Das Feld Id ist mir Wurscht

Die Frage ist, wie bau ich das in SQL zusammen.

Zur Zeit behelfe ich mich mit
select distinct(reportid+personalid),reportid,personalid from test

Sobald die summe der Ids größer 32bit ist, habe ich ein (theoretisches Problem)
Ausserdem gefällt mir ein distinct über eine Summe nicht so.


Heiko
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQL-Abfrage

  Alt 22. Sep 2006, 09:06
Ah,

Firebird und subselects

Lösung:

select test1.id, test1.reportid,test1.personalid,personal.name
from test test1
join personal on personal.id=test1.personalid
where test1.id in
(
select max(test2.id) from test test2
where
(test2.personalid=test1.personalid) and
(test2.reportid=test1.reportid)
)

Die Performance ist auch super (18 ms)

Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: SQL-Abfrage

  Alt 22. Sep 2006, 09:07
Zitat:
Sobald die summe der Ids größer 32bit ist, habe ich ein (theoretisches Problem)
Dann nimm halt BigInts( dann hast du dein Problem in die Zukunft verschoben
Versuchs mal so
select reportid,personalid from test group by reportid, personalid (Nicht getestet)
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: SQL-Abfrage

  Alt 22. Sep 2006, 09:19
Hallo,

klappt auch !

Naja, mit dem GroupBy stehe ich auf dem Kriegsfuss

Das Problem ist dann aber folgendes,
sobald ich das Ergebnise "verjoine",
um z.B. die Personaldaten mit anzeigen zu lassen,
muss ich jede select-Spalte in das GroupBy mit reinpacken.
Das ist aber OK.

Aber,
mit GroupBy braucht FB doppelt so lange.

Naja, 18ms zu 28ms

Das liegt wohl daran, das das test.id primary key ist,
aso ein select max flink ist.

Danke trotzdem


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz