AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Bestimmt Datensätze anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Bestimmt Datensätze anzeigen

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

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

Bestimmt Datensätze anzeigen

  Alt 3. Jul 2013, 20: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.655 Beiträge
 
Delphi 12 Athens
 
#2

AW: Bestimmt Datensätze anzeigen

  Alt 3. Jul 2013, 20: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
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Bestimmt Datensätze anzeigen

  Alt 3. Jul 2013, 20: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, 21: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 21:41 Uhr) Grund: Text um Frage ergänzt.
  Mit Zitat antworten Zitat
Dumpfbacke

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

AW: Bestimmt Datensätze anzeigen

  Alt 4. Jul 2013, 06: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.867 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bestimmt Datensätze anzeigen

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


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 07:22 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 by Thomas Breitkreuz