Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi RefId,date,time, Refid und höchstes Datum/Zeit ermitteln (https://www.delphipraxis.net/140925-refid-date-time-refid-und-hoechstes-datum-zeit-ermitteln.html)

hoika 29. Sep 2009 05:09

Datenbank: Firebird • Version: 1.5 • Zugriff über: egal

RefId,date,time, Refid und höchstes Datum/Zeit ermitteln
 
Hallo #,

ich habe folgende Tabelle

id integer (prim key, spielt hier aber keine Rolle)
refid integer
thedate date date Anteil
thetime date time Anteil

Ist also Dialekt 1.

Die gleiche refid kommt mehrfach vor.

Ich brauche jetzt für jede RefId das höchste theDate+theTime,
das muss ja irgendwie über group by / max gehen ?
Genau das ist meine Schwäche .. ;)

Ein SubSelect will ich vermeiden.

Danke


Heiko

nahpets 29. Sep 2009 09:03

Re: RefId,date,time, Refid und höchstes Datum/Zeit ermitteln
 
Hallo,

täte mal vermuten, dass es in dieser Art gehen müsste (habe kein Firebird zur Verfügung):
SQL-Code:
select refid, max(thedate + thetime) As TheDateTheTime from tabelle group by refid
Alternative könnte auch noch dieses möglich sein:
SQL-Code:
select refid, max(thedate) As TheDate, Max(thetime) As TheTime from tabelle group by refid

Sir Rufo 29. Sep 2009 09:08

Re: RefId,date,time, Refid und höchstes Datum/Zeit ermitteln
 
Zitat:

Zitat von nahpets
Alternative könnte auch noch dieses möglich sein:
SQL-Code:
select refid, max(thedate) As TheDate, Max(thetime) As TheTime from tabelle group by refid

Das geht fast immer schief!
Code:
id date       time
 1  01.01.2009  03:00:00
 1  02.01.2009  02:00:00
 1  03.01.2009  01:00:00
Deine Abfrage würde nun folgendes liefern:

Code:
1  03.01.2009  03:00:00
Und den Datensatz gibt es so gar nicht

cu

Oliver

nahpets 29. Sep 2009 09:22

Re: RefId,date,time, Refid und höchstes Datum/Zeit ermitteln
 
Hallo,

@Sir Rufo

das würde doch heißen, dass im Ergebnis Spalteninhalte unterschiedlicher Zeilen gemischt werden. Das dies bei SQL der Fall ist, wäre mir neu.

Meiner Meinung nach wird die Zeile aus der Tabelle gewählt, bei der zu einer RefID TheDate und TheTime die höchsten Werte haben, im Beispiel also
Code:
1  03.01.2009  01:00:00
Zumindest SQL-Server verhält sich so.

tsteinmaurer 29. Sep 2009 09:34

Re: RefId,date,time, Refid und höchstes Datum/Zeit ermitteln
 
Hallo Heiko,

separierte DATE und TIME Datentypen gibt es in Dialekt 3 und nicht in Dialect 1. Bist du dir sicher, dass du Dialekt 1 verwendest?

Folgendes sollte eigentlich schon klappen:

SQL-Code:
select refid, max(thedate + thetime) from tabelle group by refid

Oder wenn nur ein Feld (DATE in Dialekt 1):

SQL-Code:
select refid, max(thedatetime) from tabelle group by refid

Sir Rufo 29. Sep 2009 23:20

Re: RefId,date,time, Refid und höchstes Datum/Zeit ermitteln
 
Zitat:

Zitat von nahpets
Hallo,

@Sir Rufo

das würde doch heißen, dass im Ergebnis Spalteninhalte unterschiedlicher Zeilen gemischt werden. Das dies bei SQL der Fall ist, wäre mir neu.

Meiner Meinung nach wird die Zeile aus der Tabelle gewählt, bei der zu einer RefID TheDate und TheTime die höchsten Werte haben, im Beispiel also
Code:
1  03.01.2009  01:00:00
Zumindest SQL-Server verhält sich so.

:gruebel: welcher?

MySQL (5.1.33) liefert genau mein vorhergesagtes Ergebnis zurück (mich hätte alles andere auch gewundert)

Hast du das mal ausprobiert? btw: hier wird ein GROUP BY durchgeführt, da werden alle Zeilen zusammengefasst (die dem schlüssel von group by entsprechen)

cu

Oliver

mkinzler 30. Sep 2009 06:39

Re: RefId,date,time, Refid und höchstes Datum/Zeit ermitteln
 
Zitat:

das würde doch heißen, dass im Ergebnis Spalteninhalte unterschiedlicher Zeilen gemischt werden. Das dies bei SQL der Fall ist, wäre mir neu.
Es wird nicht gemischt, sondern ein Aggegat über mehrere Werte gebildet. In diesem Fall wird der größte Tag und die größte Zeit ermittelt und diese sind mit großer Wahrscheinlichkeit aus verschiedenen Datensätzen.

hoika 30. Sep 2009 16:14

Re: RefId,date,time, Refid und höchstes Datum/Zeit ermitteln
 
Hallo,

danke für die Antworten.

<Thomas>
ich meinte nur, dass der Datum und Zeitanteil getrennt sind (beides in DATE-Feldern).
Das hätte ich mir auch knicken können, weil das Max(theDate+theTime)
ja klar ist.

Ich werde es mal ausprobieren.


Heiko


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