Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Größter Datumswert in SQL Abfrage

Frage Entwicklung Datenbanken

Mitglied: BadFsaadKl

BadFsaadKl (Level 1) - Jetzt verbinden

14.01.2014, aktualisiert 21:51 Uhr, 3531 Aufrufe, 9 Kommentare, 1 Danke

Moin zusammen,

ich glaub ich hab nen kleinen Hänger.

Habe eine kleine SQL (Oracle) Abfrage, welche mir 2 Ergebnisse zurück gibt.

01.
SELECT 
02.
  a.ab_datum, 
03.
  a.f_bez, 
04.
  a.herst, 
05.
  a.typ, 
06.
  a.ser_nr 
07.
FROM 
08.
  osq01_abflug a, 
09.
  osq01_flug b 
10.
WHERE 
11.
  a.f_bez = b.f_bez AND 
12.
  b.s_ort = 'Luxemburg' AND 
13.
  b.z_ort = 'Ankara' AND 
14.
  a.ab_datum BETWEEN '10.11.2006' AND '20.11.2006'
Ergebnis:
01.
15.11.06	LH-421         	Boeing         	B777      	xv56-3142       
02.
17.11.06	LH-421         	Boeing         	B777      	xv23-0889      
Ich möchte als Ausgabe jedoch nur den Eintrag, mit dem Höchsten/Größten Datum. Sprich die Werte vom 17.11.06
Wenn ich im SELECT Bereich das Datum mit MAX auswähle, erhalte ich folgenden Fehler:
01.
SELECT 
02.
  MAX(a.ab_datum), 
03.
  a.f_bez, 
04.
  a.herst, 
05.
  a.typ, 
06.
  a.ser_nr 
07.
FROM 
08.
  osq01_abflug a, 
09.
  osq01_flug b 
10.
WHERE 
11.
  a.f_bez = b.f_bez AND 
12.
  b.s_ort = 'Luxemburg' AND 
13.
  b.z_ort = 'Ankara' AND 
14.
  a.ab_datum BETWEEN '10.11.2006' AND '20.11.2006'
01.
ORA-00937: not a single-group group function 
02.
00937. 00000 -  "not a single-group group function" 
03.
*Cause:     
04.
*Action: 
05.
Fehler in Zeile: 3 Spalte: 3
Ich steh momentan Total auf dem Schlauch, was ich hier Gruppieren muss, damit das funktioniert.

Habt Ihr ne Idee wo ich gerade hänge ?

Danke

Gruß BadFsaadKl
Mitglied: colinardo
14.01.2014, aktualisiert um 20:44 Uhr
Hi,
01.
SELECT 
02.
  a.ab_datum, 
03.
  a.f_bez, 
04.
  a.herst, 
05.
  a.typ, 
06.
  a.ser_nr 
07.
FROM 
08.
  osq01_abflug a, 
09.
  osq01_flug b 
10.
WHERE 
11.
  a.f_bez = b.f_bez AND 
12.
  b.s_ort = 'Luxemburg' AND 
13.
  b.z_ort = 'Ankara' AND 
14.
  a.ab_datum BETWEEN '10.11.2006' AND '20.11.2006' 
15.
ORDER BY a.ab_datum DESC 
16.
LIMIT 1
Grüße Uwe
Bitte warten ..
Mitglied: BadFsaadKl
14.01.2014 um 20:36 Uhr
Hi Uwe,

bekomme hier immer nur den 15.11.06 als Wert raus.
selbst wenn ich die Sortierung DESC durch ASC tausche.

Grüße Michel
Bitte warten ..
Mitglied: colinardo
14.01.2014 um 20:45 Uhr
hab's grad nochmal geändert, kann's gerade nicht testen ...
Bitte warten ..
Mitglied: BadFsaadKl
14.01.2014 um 20:45 Uhr
Ich habe auch das gleiche wenn ich ich mir nur den größten Wert von Durchschnittswerten anzeigen lassen möchte:

01.
SELECT 
02.
  a.herst AS "HERST", 
03.
  AVG(a.f_std) AS "MMFST" 
04.
FROM 
05.
  osq01_flugzeug a 
06.
GROUP BY a.herst 
07.
ORDER BY MMFST DESC
Ergebnis:
01.
Douglas        	8447 
02.
Boeing         	6225 
03.
Airbus         	3239,333333333333333333333333333333333333
Und wenn ich das jetzt mit Rownum mache bekomme ich was völlig anderes:
01.
SELECT 
02.
  a.herst AS "HERST", 
03.
  AVG(a.f_std) AS "MMFST" 
04.
FROM 
05.
  osq01_flugzeug a 
06.
WHERE ROWNUM = 1 
07.
GROUP BY a.herst 
08.
ORDER BY MMFST DESC
Ergebnis:
01.
Boeing         	4567
Bitte warten ..
Mitglied: BadFsaadKl
14.01.2014 um 20:47 Uhr
Mit dem Limit bekomme ich gleich nen ORA Fehler:
01.
ORA-00933: SQL command not properly ended 
02.
00933. 00000 -  "SQL command not properly ended" 
03.
*Cause:     
04.
*Action: 
05.
Fehler in Zeile: 16 Spalte: 1
Bitte warten ..
Mitglied: colinardo
14.01.2014 um 20:52 Uhr
oh nö das ist ja Oracle , dann geht das nicht, wie du es dort machst:
http://stackoverflow.com/questions/11390585/maxdate-sql-oracle
Sorry bin grad auf dem Smartphone
Bitte warten ..
Mitglied: colinardo
LÖSUNG 14.01.2014, aktualisiert um 21:51 Uhr
So müsste es für Oracle gehen
01.
SELECT * FROM ( 
02.
SELECT 
03.
  a.ab_datum, 
04.
  a.f_bez, 
05.
  a.herst, 
06.
  a.typ, 
07.
  a.ser_nr 
08.
FROM 
09.
  osq01_abflug a, 
10.
  osq01_flug b 
11.
WHERE 
12.
  a.f_bez = b.f_bez AND 
13.
  b.s_ort = 'Luxemburg' AND 
14.
  b.z_ort = 'Ankara' AND 
15.
  a.ab_datum BETWEEN '10.11.2006' AND '20.11.2006' 
16.
ORDER BY a.ab_datum DESC) 
17.
WHERE ROWNUM=1;
Bitte warten ..
Mitglied: BadFsaadKl
14.01.2014 um 21:50 Uhr
Supi.
Funktioniert.

Danke Uwe

Gruß Michel
Bitte warten ..
Mitglied: Biber
LÖSUNG 15.01.2014, aktualisiert 29.04.2014
Moin BadFsaadKl und colinardo,

da muss ich Einspruch erheben - diese Abfrage liefert bei den oben angegebenen Daten das richtige Ergebnis - aber nicht bei anderen.
Da das "Abflugdatum" in der Tabelle osq01_abflug nur ein Stringwert ist (und kein Datum), wird hier auch nur ein Stringvergleich gemacht.

Bedeutet: bei der Prüfung "...a.ab_datum BETWEEN '10.11.2006' AND '20.11.2006' " werde alle Strings gefunden, die zwischen "10*" und "20*" sind und davon der "höchste" genommen.
Das muss aber nicht mal ein Datumswert, geschweige denn ein Datum aus dem Jahr 2006 sein,

Beispiel: Wenn in den gefundenen Daten auch noch ein Flug "LH-421" von Luxemburg nach Ankara wäre z.B vom Datum 18.11.2013 (also eigentlich ausserhalb des vermeinlich abgefragten Zeitraums "...a.ab_datum BETWEEN '10.11.2006' AND '20.11.2006' " , dann wird wegen des Stringsvergleichs mit colinardos Abfrage dieser gefunden.

01.
with osq01_abflug( ab_datum, f_bez, herst, typ, ser_nr) as 
02.
(         select '17.11.06', 'LH-421', 'Boeing' , 'B777', 'xv23-0889' from dual 
03.
union all select '15.11.06', 'LH-421',  'Boeing', 'B777', 'xv56-3142' from dual 
04.
union all select '18.11.13', 'LH-421',  'Boeing', 'B777', 'xv99-0815' from dual 
05.
)  
06.
, osq01_flug (f_bez, s_ort, z_ort) as 
07.
 (                select  'LH-421', 'Luxemburg', 'Ankara' from dual ) 
08.
  
09.
SELECT * FROM ( 
10.
SELECT 
11.
  a.ab_datum, 
12.
  a.f_bez, 
13.
  a.herst, 
14.
  a.typ, 
15.
  a.ser_nr 
16.
FROM 
17.
  osq01_abflug a, 
18.
  osq01_flug b 
19.
WHERE 
20.
  a.f_bez = b.f_bez AND 
21.
  b.s_ort = 'Luxemburg' AND 
22.
  b.z_ort = 'Ankara'   AND 
23.
    a.ab_datum BETWEEN '10.11.2006' AND '20.11.2006'  
24.
ORDER BY a.ab_datum  DESC) 
25.
WHERE ROWNUM=1;
Ergebnis ist ein Datum definitiv ausserhalb des Bereichs 10.Nov 2006 - 20.Nov 2006..
AB_DATUM | F_BEZ  | HERST  | TYP  | SER_NR    
---------+--------+--------+------+---------- 
18.11.13 | LH-421 | Boeing | B777 | xv99-0815
Besser wäre es mit einer Prüfung auf Datumswerte:

01.
with osq01_abflug( ab_datum, f_bez, herst, typ, ser_nr) as 
02.
(         select '17.11.06', 'LH-421', 'Boeing' , 'B777', 'xv23-0889' from dual 
03.
union all select '15.11.06', 'LH-421',  'Boeing', 'B777', 'xv56-3142' from dual 
04.
union all select '18.11.13', 'LH-421',  'Boeing', 'B777', 'xv99-0815' from dual 
05.
)  
06.
, osq01_flug (f_bez, s_ort, z_ort) as 
07.
 (                select  'LH-421', 'Luxemburg', 'Ankara' from dual ) 
08.
  
09.
SELECT * FROM ( 
10.
SELECT 
11.
  a.ab_datum, 
12.
  a.f_bez, 
13.
  a.herst, 
14.
  a.typ, 
15.
  a.ser_nr 
16.
FROM 
17.
  osq01_abflug a, 
18.
  osq01_flug b 
19.
WHERE 
20.
  a.f_bez = b.f_bez AND 
21.
  b.s_ort = 'Luxemburg' AND 
22.
  b.z_ort = 'Ankara'   AND 
23.
   To_date(a.ab_datum, 'dd.mm.yy') BETWEEN To_date('10.11.2006', 'dd.mm.yyyy') AND to_date('20.11.2006','dd.mm.yyyy') 
24.
ORDER BY To_date(a.ab_datum, 'dd.mm.yy') DESC) 
25.
WHERE ROWNUM=1;
Ergebnis.
AB_DATUM | F_BEZ  | HERST  | TYP  | SER_NR    
---------+--------+--------+------+---------- 
17.11.06 | LH-421 | Boeing | B777 | xv23-0889

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Datenbanken
SUM oder AVG in SQL Abfrage dauert viel zu lange warum? (5)

Frage von samet22 zum Thema Datenbanken ...

Datenbanken
gelöst SQL-Abfrage mit MAX() (9)

Frage von FrAmEr zum Thema Datenbanken ...

Datenbanken
gelöst Schleifen in SQL-Abfrage bei 2 Tabellen (2)

Frage von Aximand zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...