Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Max-Abfrage Feld nicht gefunden (https://www.delphipraxis.net/110715-sql-max-abfrage-feld-nicht-gefunden.html)

oldie 23. Mär 2008 08:30

Datenbank: Paradox • Zugriff über: BDE

SQL Max-Abfrage Feld nicht gefunden
 
Hallo,

wie komme ich nach dieser Abfrage

Delphi-Quellcode:
select TrZeitPerIndex, max(TrZeitTime) from TableName where TrZeitAufIndex>0 group by TrZeitPerIndex
an die TrZeitTime ? Es kommt der Fehler Feld TrZeitTime nicht gefunden. Wenn ich TrZeitTime zusätzlich hinzufüge werden natürlich alle Personen mehrfach angezeigt.

Gruß
Oldie

Bernhard Geyer 23. Mär 2008 08:35

Re: SQL Max-Abfrage Feld nicht gefunden
 
Probiers mal so:
SQL-Code:
select TrZeitPerIndex, max(TrZeitTime) from TableName group by TrZeitPerIndex having TrZeitAufIndex>0

marabu 23. Mär 2008 09:01

Re: SQL Max-Abfrage Feld nicht gefunden
 
Moin,

durch die Aggregatfunktion erhält das Feld einen internen Namen. Du kannst es über seinen Feldindex ansprechen oder einen Aliasnamen vergeben:

SQL-Code:
SELECT TrZeitPerIndex, MAX(TrZeitTime) AS TrZeitTime
FROM TableName
WHEREe TrZeitAufIndex > 0 
GROUP BY TrZeitPerIndex
Frohe Ostern

oldie 23. Mär 2008 09:05

Re: SQL Max-Abfrage Feld nicht gefunden
 
@Bernhard Geyer
hat leider einen Fehler zur Folge. "Capability not supported"

@marabu
genau so gehts

Danke Euch

oldie 23. Mär 2008 09:42

Re: SQL Max-Abfrage Feld nicht gefunden
 
jetzt habe ich noch eine zuätzliche Frage

wie füge ich den Ergebnisdatensätzen weiter Felder hinzu ohne das Ergebis zu verändern?

Weitere Felder im Select-Bereich erweitern die Ergebnisliste .

mkinzler 23. Mär 2008 09:45

Re: SQL Max-Abfrage Feld nicht gefunden
 
Zitat:

wie füge ich den Ergebnisdatensätzen weiter Felder hinzu ohne das Ergebis zu verändern?

Weitere Felder im Select-Bereich erweitern die Ergebnisliste .
Hä? Du willst das Ergebnis erweitern ohne sie zu erweitern

oldie 23. Mär 2008 09:55

Re: SQL Max-Abfrage Feld nicht gefunden
 
Ok etwas genauer
Delphi-Quellcode:
SELECT TrZeitPerIndex, MAX(TrZeitTime) AS TrZeitTime
FROM TableName
WHEREe TrZeitAufIndex > 0
GROUP BY TrZeitPerIndex
findet pro Person den Datensatz mit der größten Zeit. Das ist OK.
In diesem Datensatz befinden sich noch weitere Felder. Auf diese möchte ich auch zugreifen.

Delphi-Quellcode:
SELECT TrZeitPerIndex, MAX(TrZeitTime) AS TrZeitTime, Feld1, Feld2,
FROM TableName
WHEREe TrZeitAufIndex > 0
GROUP BY TrZeitPerIndex
dies hat zur Folge, dass Personen doppelt angezeigt werden.

mkinzler 23. Mär 2008 10:02

Re: SQL Max-Abfrage Feld nicht gefunden
 
Jetzt verstehe ich deine Frage.
Welches Feld1, Feld2 willst du? (von welchem der zusammengefassten Datensätze?)
SQL-Code:
SELECT
    TrZeitPerIndex, MAX(TrZeitTime) AS TrZeitTime, MIN( Feld1), MIN(( Feld2)
FROM
    TableName
WHERE
     TrZeitAufIndex > 0
GROUP BY
    TrZeitPerIndex;

oldie 23. Mär 2008 10:14

Re: SQL Max-Abfrage Feld nicht gefunden
 
von ursprünglichen Abfrage
Delphi-Quellcode:
SELECT
    TrZeitPerIndex, MAX(TrZeitTime) AS TrZeitTime
FROM
    TableName
WHERE
     TrZeitAufIndex > 0
GROUP BY
    TrZeitPerIndex;
Delphi-Quellcode:
SELECT
    TrZeitPerIndex, MAX(TrZeitTime) AS TrZeitTime, MIN( Feld1) AS Feld1, MIN( Feld2) AS Feld2
FROM
    TableName
WHERE
     TrZeitAufIndex > 0
GROUP BY
    TrZeitPerIndex;
verändert die Anzahl der gefundenen Datensätze

mkinzler 23. Mär 2008 10:16

Re: SQL Max-Abfrage Feld nicht gefunden
 
Das dürfte eigentlich nicht die Anzahl der Datensätze verändern, da ja alle mit identischen TrZeitPerIndex zu einem Datensatz verschmolzen wird.

oldie 23. Mär 2008 10:24

Re: SQL Max-Abfrage Feld nicht gefunden
 
bitte um Entschuldigung, hatte vom Testen hinter "group by" noch Feld1 und Feld2 drin.

Danke für Deine Antworten und schöne Ostern

oldie 23. Mär 2008 12:51

Re: SQL Max-Abfrage Feld nicht gefunden
 
doch noch ein Problem

Delphi-Quellcode:
SELECT
    TrZeitPerIndex, MAX(TrZeitTime) AS TrZeitTime, MIN( Feld1) as Feld1, MIN(( Feld2) as Feld2
FROM
    TableName
WHERE
     TrZeitAufIndex > 0
GROUP BY
    TrZeitPerIndex;
jetzt wird je Datensatz nicht der zugehörige Wert für Feld1 und Feld2 ausgegeben sondern der kleinste alle Werte vom Personal.

Beispiel
TrZeitPerIndex ; TrZeitTime ; Feld1 ; Feld2
1 ; 12:00 ; 10 ; 12
1 ; 13:00 ; 20 ; 11
1 ; 15:00 ; 15 ; 34

Ergebnis
1 ; 15:00 ; 10 ; 11

richtig wäre
1 ; 15:00 ; 15 ; 34

hat noch jemand einen Vorschlag?

DeddyH 23. Mär 2008 13:23

Re: SQL Max-Abfrage Feld nicht gefunden
 
Wenn ich das richtig verstanden habe, suchst Du das hier: http://www.sql-tips.de/index.php/Die_Besten_pro_Gruppe

oldie 23. Mär 2008 20:13

Re: SQL Max-Abfrage Feld nicht gefunden
 
Hi DeddyH,

genau das war es. Jetzt bekomme ich das richtige Ergebnis.

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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