AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Bestimmt Datensätze anzeigen

Bestimmt Datensätze anzeigen

Ein Thema von Dumpfbacke · begonnen am 3. Jul 2013 · letzter Beitrag vom 5. Jul 2013
Antwort Antwort
Seite 1 von 2  1 2   
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
310 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Bestimmt Datensätze anzeigen

  Alt 3. Jul 2013, 19:10
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
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:
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
Was mache ich den falsch hier ?

Als Ergebnis würde ich erwarten

Code:
ID       Wert1
1         15.06.2013
3         17.04.2013
Die ID 2 und 4 sollte nicht erscheinen
Tanja
Tanja
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.401 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Bestimmt Datensätze anzeigen

  Alt 3. Jul 2013, 19:22
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
    )
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
310 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Bestimmt Datensätze anzeigen

  Alt 3. Jul 2013, 19:43
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).
Tanja
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Bestimmt Datensätze anzeigen

  Alt 3. Jul 2013, 20:29
Suchst Du sowas?
Code:
select max(wert1) As Wert, id
from tabelle
where wert1 is not null
group by id
order by id
oder ist Null quasi größer als jedes beliebige Datum anzusehen und falls vorhanden soll die entsprechende ID nicht ausgegeben werden?

Unter Oracle könnte das eventuell so gehen:
Code:
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
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.

Geändert von nahpets ( 3. Jul 2013 um 20:41 Uhr) Grund: Text um Frage ergänzt.
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
310 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Bestimmt Datensätze anzeigen

  Alt 4. Jul 2013, 05:22
oder ist Null quasi größer als jedes beliebige Datum anzusehen und falls vorhanden soll die entsprechende ID nicht ausgegeben werden?

Unter Oracle könnte das eventuell so gehen:
Code:
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
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.
Ja genau so soll es sein. Die ID 2 soll nicht ausgegeben sein. NULL soll größer sein als jedes Datum. Das ganze nur unter Firebird 2.5
Tanja
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.828 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Bestimmt Datensätze anzeigen

  Alt 4. Jul 2013, 08:07
NVL() gibt es als UDF. Besser ist es aber die builtin Fuktion COALESCE() zu verwenden
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.284 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Bestimmt Datensätze anzeigen

  Alt 4. Jul 2013, 14:17
Code:
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)
oder

Code:
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
Test natürlich in deinen Tabellennamen ändern.

Frank
Frank Reim

Geändert von dataspider ( 4. Jul 2013 um 14:24 Uhr)
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
310 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Bestimmt Datensätze anzeigen

  Alt 4. Jul 2013, 19:05
Code:
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)
oder

Code:
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
Test natürlich in deinen Tabellennamen ändern.

Frank
Funktioniert leider beides nicht.
Tanja
Tanja
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.284 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Bestimmt Datensätze anzeigen

  Alt 4. Jul 2013, 20:03
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
Miniaturansicht angehängter Grafiken
abfrage.jpg  
Frank Reim

Geändert von dataspider ( 4. Jul 2013 um 20:05 Uhr)
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
267 Beiträge
 
Delphi XE5 Enterprise
 
#10

AW: Bestimmt Datensätze anzeigen

  Alt 4. Jul 2013, 20:32
Versuchs mal damit
SQL-Code:
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'
Edit:
@dataspider
Deine Querys funktionieren auch, sind aber teurer.
Alexander

Geändert von alex517 ( 4. Jul 2013 um 20:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf