![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
Bestimmt Datensätze anzeigen
Hallo Leute,
ich komme einfach nicht weiter. Könnte mir jemand mal von dem Schlauch helfen aus dem ich stehe. Als Ergebnis möchte ich alle IDs und das größte Datum von Wert1 haben bei denen in allen Spalten des Wert1 ein Datum steht. Die IDs bei denen mindestens in einem Feld der Spalte Wert1 kein Datum steht soll nicht angezeigt werden. Die Anzahl der Datensätze kann unterschiedlich sein. Es kann z.B. sein das es die ID 18 nur einmal gibt und die ID 17 50 mal vorhanden ist. Ich habe schon mit Group by usw. probiert.
Code:
Was mache ich den falsch hier ? :evil:
Hier ein beispiel der Tabelle:
ID Wert1 Anzahl 1 12.03.2013 17 1 15.06.2013 14 2 21.06.2013 105 2 NULL 3 17.04.2013 104 4 NULL Als Ergebnis würde ich erwarten
Code:
Die ID 2 und 4 sollte nicht erscheinen
ID Wert1
1 15.06.2013 3 17.04.2013 Tanja |
AW: Bestimmt Datensätze anzeigen
Ungetestet:
SQL-Code:
SELECT
ID, Wert1 FROM Tabelle A WHERE Wert1 IS NOT NULL AND Wert1 = ( SELECT MAX(Wert1) FROM Tabelle WHERE ID = A.ID ) |
AW: Bestimmt Datensätze anzeigen
Danke für die Info, doch leider geht es nicht. Bei Deinem Beispiel kommt hier die ID 2 mit raus. Es gibt ja eine Zeile bei der in Wert1 ein Datum steht und das zeite ist logischerweise dann auch das selbe. Ich hatte schon Zweifel an mir. Ich bin hier schon seit drei Stunden an dem Problem und es kann jemand innerhalb von Mitnuten lösen (Was mich jedoch sehr gefreut hätte).
|
AW: Bestimmt Datensätze anzeigen
Suchst Du sowas?
Code:
oder ist Null quasi größer als jedes beliebige Datum anzusehen und falls vorhanden soll die entsprechende ID nicht ausgegeben werden?
select max(wert1) As Wert, id
from tabelle where wert1 is not null group by id order by id Unter Oracle könnte das eventuell so gehen:
Code:
Wenn der Inhalt einer Spalte Null ist, so ersetzt nvl dieses Null durch den angegebenen Wert. Kennt Firebird eine entsprechende Funktion? Wenn nicht, diese selber bauen.
select * from (
select max(nvl(wert1,To_Date('31.12.9999')) As Wert, id from tabelle group by id ) where wert < To_Date('31.12.9999') order by id |
AW: Bestimmt Datensätze anzeigen
Zitat:
|
AW: Bestimmt Datensätze anzeigen
NVL() gibt es als UDF. Besser ist es aber die builtin Fuktion COALESCE() zu verwenden
|
AW: Bestimmt Datensätze anzeigen
Code:
oder
select
distinct id, (select max(y.wert) from test y where y.id = t.id) as wert from test t where not exists(select x.id from test x where x.id = t.id and x.wert is null)
Code:
Test natürlich in deinen Tabellennamen ändern.
select
t.id , max(t.wert) as wert from test t where not exists(select x.id from test x where x.id = t.id and x.wert is null) group by t.id Frank |
AW: Bestimmt Datensätze anzeigen
Zitat:
Tanja |
AW: Bestimmt Datensätze anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir geht beides (siehe Anhang).
Aber da habe ich wohl sicher etwas falsch verstanden... Und WERT muss natürlich WERT1 heißen, aber das hast du sicher schon bemerkt. Frank |
AW: Bestimmt Datensätze anzeigen
Versuchs mal damit
SQL-Code:
Edit:
select
TT.ID, MAX(TT.MAXDATUM) from (select T.ID, COALESCE(T1.WERT1, '9999-01-01') MAXDATUM from T ORDER BY T.ID) TT GROUP by TT.ID having MAX(TT.MAXDATUM) < '9999-01-01' @dataspider Deine Querys funktionieren auch, sind aber teurer. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 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