Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Abfrage (https://www.delphipraxis.net/77637-sql-abfrage.html)

hoika 22. Sep 2006 08:01

Datenbank: FB • Version: 1.5 • Zugriff über: wurscht

SQL-Abfrage
 
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

hoika 22. Sep 2006 08:06

Re: SQL-Abfrage
 
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

mkinzler 22. Sep 2006 08:07

Re: SQL-Abfrage
 
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
SQL-Code:
select reportid,personalid from test group by reportid, personalid
(Nicht getestet)

hoika 22. Sep 2006 08:19

Re: SQL-Abfrage
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz