Autor Beitrag
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 12.04.11 09:55 
Hallo,
ich möchte aus meiner DBF Datei die 10 schlechten werte herauslesen. Wie kann ich das mit hilfe einer SQL abfrage machen? den schlechten wert bekomme ich ja mittel MAX(Wert)...

danke lg
ivy
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Di 12.04.11 10:03 
Was heißt denn "schlechtester Wert"??? Werte können minimal, maximal etc. sein, sie können eine hohe Standardabweichung haben (wobei man dann hoch definieren muss) oder einen hohen Fehler (bei Messungen z.B.). Aber Werte sind nicht schlecht...

Entsprechend deinem Beispiel mit der Max-Funktion gehe ich davon aus, dass du die zehn größten Werte meinst. Was sind das für Werte? Double? Wie liegen sie vor? Du könntest sie sortieren, der Größe nach, und dir die zehn letzten Werte ausgeben lassen.

SELECT * FROM `tableName` ORDER BY MesswerName LIMIT 10;
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 12.04.11 10:19 
ja es sind dpuble werte und ich möchte die 10 "größten" werte haben.
werde deinen vorschlag mal testen...

edit: Sytanxfehler in ORDER BY Klausel... kommt bei mir hab jetzt mal noch DESC eingefügt aber funktioniert trotzdem nicht^^
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 12.04.11 10:32 
Nicht jede DB kann "LIMIT". Bei DBF kann ich mir vorstellen, dass es so ist.
Also einfach mal ohne Limit-Angabe probieren und mit desc arbeiten. Dann die ersten 10 Werte verarbeiten.

btw:
Limit wird von einigen Datenbanken auch anders verarbeit. In einem Fall hatte ich es, dass Limit vor dem Order by ausgeführt wurde. Das führte natürlich zu völlig falschen Ergebnissen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 12.04.11 10:47 
Solltest du noch die BDE nutzen: die kennt Limit ohnehin nicht.

Order by sollte aber immer gehen... Wie genau hast du die Abfrage jetzt?
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Di 12.04.11 10:57 
Es gibt auch noch TOP 10. LIMIT 10 ist glaube ich bei MySQL.
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 12.04.11 11:15 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wie genau hast du die Abfrage jetzt?


so:

ausblenden SQL-Anweisung
1:
SELECT * FROM D:\\Projekte\\data\\MEASDATA.DBF WHERE System = '1' AND Typecode = 'ABC' AND Date = '12.03.2011' ORDER BY VALUE DESC;					


VALUE ist die spalte mit den werten die herausgefiltert werden sollen. VOm benutzer können filter gesetz werden, system, typecode, datum....
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 12.04.11 11:18 
Erstens brauchst du am Ende kein Semikolon, zweitens ist "value" wie du im Highlighter schon siehst ein reserviertes Wort. Deshalb wird das nicht gehen. Benenne einfach mal deine Spalte um. ;-)
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 12.04.11 11:26 
Spalte umbenennen bei einem System, dass schon läuft, könnte schwierig werden. Wäre aber wohl die beste Lösung.

Bei Oracle kann man auch die Spaltennummer in der Sortierung angeben. Ob das bei DBF geht, weiß ich nicht.
Das würden dann etwa so aussehen:
ausblenden SQL-Anweisung
1:
SELECT * FROM D:\\Projekte\\data\\MEASDATA.DBF WHERE System = '1' AND Typecode = 'ABC' AND Date = '12.03.2011' ORDER BY 3 DESC					

Die "3" ist jetzt willkürlich gewählt. Value müsste dann die 3. Spalte in der Tabelle sein.
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 12.04.11 11:30 
hmm das funktioniert nicht^^
"Das MS Jet Datenbankmodul erkennt '3' nicht als gültigen Feldnamen oder ausdruck"

umbenennen kann ich die spalte leider nicht. die wird mir vom system so gegeben...


Zuletzt bearbeitet von Ivy am Di 19.04.11 10:20, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 12.04.11 11:33 
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Spalte umbenennen bei einem System, dass schon läuft, könnte schwierig werden.
Zumindest zum Testen kann man es aber machen. ;-)
Wenn dann klar ist, dass das die Ursache ist, kann man immer noch schauen wie man das löst.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 12.04.11 12:04 
Hi,

oder den Tabellennamen in Anführungsstriche setzen:
ausblenden SQL-Anweisung
1:
SELECT * FROM D:\\Projekte\\data\\MEASDATA.DBF WHERE System = '1' AND Typecode = 'ABC' AND Date = '12.03.2011' ORDER BY "value" DESC					
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 12.04.11 13:33 
hm hab das value jetzt mal in einfach hochkommas gesetz. jetzt kommt aber ein anderer fehler.
"Datentype in Kriterienausdruck unverträglich"
AHA? versteh ich nicht wieso, ging bis jetzt immer ohne dass er an der WHERE klausel etwas gemeckert hat..?!
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mo 18.04.11 11:21 
ah hilfe ich krieg den fehler nicht raus. Noch immer kommt die Fehlermeldung "datatentypen in kriterienausdruck unverträglich"
meine anweisung:

ausblenden SQL-Anweisung
1:
"SELECT Typecode FROM D:\\data\\MEASDATA.DBF WHERE System = '1' AND Typecode ='FORD' AND Date='21.03.2005' ORDER BY VALUE DESC;"					
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 18.04.11 12:45 
Hallo Ivy,

für die Programmierung mit ADO.NET solltest du SQL-Parameter benutzen, s. Parameter von SQL Befehlen
(ich tippe darauf, daß das Datum nicht korrekt erkannt wird...)

Ein Beispiel mit SQL-Parametern hatte ich mal unter www.c-sharp-forum.de....php?p=636873#636873 gepostet.
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mo 18.04.11 14:29 
aha also praktisch so:

ausblenden C#-Quelltext
1:
 command.Parameters.AddWithValue("@Date", String.Format("yyyy/MM/dd"));					
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 18.04.11 15:41 
Hallo,

nur daß du als Wert eine Variable vom Typ DateTime (anstatt eines Strings) übergibst, also
ausblenden C#-Quelltext
1:
2:
DataTime date = new DateTime(20050321);
command.Parameters.AddWithValue("@Date", date);

(denn in der DB-Tabelle wird ja wohl die Spalte 'Date' als Datentyp 'Date' angelegt sein - und nicht als string bzw. varchar oder wie auch immer das bei DBF (DBase/FoxPro/...) heißt).
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mo 18.04.11 15:56 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:

[/cs]
(denn in der DB-Tabelle wird ja wohl die Spalte 'Date' als Datentyp 'Date' angelegt sein - und nicht als string bzw. varchar oder wie auch immer das bei DBF (DBase/FoxPro/...) heißt).


doch ich habe gerade nach geschaut, warum auch immer ist meine spalte Date als String angelegt?!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 18.04.11 16:07 
Okay, aber dann solltest du eigentlich keine Fehlermeldung "Datentypen in Kriterienausdruck unverträglich" bekommen (als Strings kann man ja alles mögliche übergeben).
Oder ist etwa die Spalte 'System' ein 'int', dann wäre natürlich
ausblenden C#-Quelltext
1:
2:
3:
4:
command.CommandText = "SELECT Typecode FROM D:\\data\\MEASDATA.DBF WHERE System = @System AND Typecode = @Typecode AND Date=@Date ORDER BY VALUE DESC;"
command.Parameters.AddWithValue("@System"1);
command.Parameters.AddWithValue("@Typecode"'FORD');
command.Parameters.AddWithValue("@Date"'21.03.2005');

richtig?

Du solltest jetzt ersteinmal versuchen den genauen Fehler zu finden, d.h. am besten ersteinmal ein simples "select * from <table>" abschicken und dann nach und nach die "where"-Bedingung erweitern.

P.S. Beachte aber, daß gerade Namen wie "system", "date", "value" auch Schlüsselwörter sein könnten, so daß du diese dann wiederum (wie schon vorher von mir geschrieben) in Anführungsstriche setzen müßtest!!!
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 19.04.11 09:01 
Also die Spalte System ist ein String, genauso wie Value und Date...
werde jett mal veruschen schritt für schritt den select befehlt auszuführen^^^

edit: also ab der system abfrage kommt der fehler...muss wohl daran liegen