1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Max-Wert einer Abfrage

Dieses Thema im Forum "Relationale Datenbanksysteme" wurde erstellt von Frostie10, 31. August 2008.

  1. Frostie10

    Frostie10 Grünschnabel

    Hallo :)

    Wie kann ich den höchsten Wert der aktuellen Abfrage ausgeben.

    MIt
    Code (Text):
    1. Where datum = (select max(datum) from tabelle1)
    wird ja das höchste Datum der Tabelle1 ausgegeben. Aber ich möchte den höchsten Wert dieser Abfrage anzeigen lassen.
    Also, ich habe eine normale Select-Abfrage z.B:
    Code (Text):
    1. Select Name, Datum, Stelle from Tabelle1 where Name = 'Meyer' and ....

    Diese Abfrage enthält nun mehere Datensätze mit unterschiedlichen Daten. Nun soll aus diesen Werten nur das höchste Datum angezeigt werden.

    Wie stelle ich dies an?

    Ich hoffe ihr könnt mir weiterhelfen...

    Gruß
    Frostie
  2. kuddeldaddeldu

    kuddeldaddeldu Erfahrenes Mitglied

    Hi,

    wenn Du keine andere Sortierung brauchst, könntest Du nach dem Datum sortieren, oder Du ermittelst den höchsten Wert halt in der Schleife, die die Datensätze ausliest.

    LG
  3. Cojote

    Cojote Grünschnabel

    Select MAX(Datum) from Tabelle1 where Name = 'Meyer' and ....
    GROUP BY 1

    Gruppieren, danach aggregieren. Nach dem gruppieren kann man Aggregatfunktionen auf alle Spalten ausführen, man kann aber nur die Spalten selektieren die auch im GROUP BY vorkommen (in dem Fall jetzt gar keine)
  4. Breit

    Breit Grünschnabel

    Du hängst einfach
    Code (Text):
    1. ORDER BY datum LIMIT 1
    an`s Ende.

    Dann wird nach dem Datum sortiert, aber es wird nur ein Datensatz geliefert
    -> das ist dann der mit dem neustem oder ältestem Datum.
  5. kuddeldaddeldu

    kuddeldaddeldu Erfahrenes Mitglied

    Hi,

    @Cojote: Das funktioiert so nicht. GROUP BY 1 bedeutet ja, gruppiere nach Spalte 1 (der selektierten), das wäre MAX(Datum) und danach kann natürlich nicht gruppiert werden.

    LG
  6. Cojote

    Cojote Grünschnabel

    @kuddeldaddeldu: Stimmt du hast recht. War gestern nicht ganz bei der Sache.
  7. Saban

    Saban Grünschnabel

    Hi Zusammen!

    also ich hab das selbe Problem wie Frosti! ich würde auch gerne nur einen Datensatz ausgeben und zwar den niedrigsten. Ich glaub ob höchster oder niedrigster Datensatz ist kein Unterschied... Also ich geh so vor:
    Code (Java):
    1.  result = stmt.executeQuery(
    2. "SELECT Artikel.ArtikelNr, Artikelpreis.ArtikelNr, Preis, von_Datum, bis_Datum, Artikelbezeichnung" +
    3. "FROM Artikelpreis, Artikel" +
    4. "WHERE Artikelpreis.ArtikelNr = Artikel.ArtikelNr" +
    5. "AND von_Datum >= #01/01/2007#" +
    6. "AND bis_Datum <= #31/12/2007#" +
    7. "ORDER BY Preis DESC");
    Nun ist des Problem das ich sortierte zwei Datensätze bekomme ich will jedoch nur den niedrigsten bekommen. Könnt ihr mir helfen?

    MfG
    Saban
    Zuletzt von einem Moderator bearbeitet: 23. Mai 2014
  8. shutdown

    shutdown Grünschnabel

    Könnte vielleicht irgendjemand von euch mal das verwendete DBMS mitteilen?
    Nur so könnte man nämlich zielgerichtet helfen.

    Ein
    Code (Text):
    1. LIMIT 0,1
    funktioniert nämlich nur in MySQL.
    Unter Oracle würde man eine TopN-Analyse machen.
    Und unter Informix würde man alles doppelt schreiben oder bitterlich weinen.

    Helfen kann man euch hier nur, wenn ihr mal ein paar Infos gebt.
  9. Saban

    Saban Grünschnabel

    Hi!

    tut mir leid das hab ich vergessen... Ich benutze eine Access DB!

    MfG
    Saban
  10. shutdown

    shutdown Grünschnabel

    So wie das aussieht, gehst du ja nicht über eine "echte" Abfrage, sondern schießt das ganze über VBA rein. Das einfachste wäre da, wenn du die Sortierung in ASC umänderst und dann einfach bei der Weiterverarbeitung nur das erste ResultSet (das niedrigste) verarbeitest.
  11. Saban

    Saban Grünschnabel

    Hi!

    ich mach des aber leider mit Java und soll des alles NUR mit SQL Statements lösen, ansonsten hätte ich alle results in ein Array geschrieben und da dann wie du gesagt hast nur das erste ausgegeben. Kann man die Ausgabe net irgendwie mit GROUP BY zusammenfassen?

    MfG
    Saban
  12. shutdown

    shutdown Grünschnabel

    Dann gibt es nur die Möglichkeit, die Abfrage in 2 Teile zu teilen

    Original mit mehreren Werten
    Code (SQL):
    1.  
    2. SELECT WAS_ICH_WISSEN_WILL FROM TABELLEN WHERE WAS_ERFÜLLT_SEIN_MUSS
    3.  
    Es wird nun ein Bindeglied BINDER eingeführt

    Code (SQL):
    1.  
    2. SELECT WAS_ICH_WISSEN_WILL FROM TABELLEN WHERE BINDER = (...)
    3. AND WAS_ERFÜLLT_SEIN_MUSS
    4.  
    Und dieser Binder wird durch min() oder max() ermittelt

    Code (SQL):
    1.  
    2. SELECT MIN(BINDER_SPALTE) FROM TABELLEN WHERE WAS_ERFÜLLT_SEIN_MUSS
    3.  

    Damit kommst du dann zu folgendem Endergebnis:

    Code (SQL):
    1.  
    2. SELECT WAS_ICH_WISSEN_WILL FROM TABELLEN WHERE BINDER = (
    3.      SELECT MIN(BINDER_SPALTE) FROM TABELLEN WHERE WAS_ERFÜLLT_SEIN_MUSS
    4. ) AND WAS_ERFÜLLT_SEIN_MUSS
    5.  
  13. Saban

    Saban Grünschnabel

    Hey,

    also ich habs jetzt so gemacht wie in deinem Post. Jetzt kommt bei mir aber die Fehlermeldung:

    Sql.Exception: 1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben.

    so frage ich ab:
    Code (Java):
    1. while(result.next()){
    2. System.out.println(result.getString("Artikelpreis.ArtikelNr") + ", " + result.getDouble("Preis") + ", " +
    3. result.getDate("von_Datum") + ", " + result.getDate("bis_Datum") + ", " + result.getString("Artikelbezeichnung");}
    MfG
    Saban
    Zuletzt von einem Moderator bearbeitet: 23. Mai 2014
  14. shutdown

    shutdown Grünschnabel

    1. zu wenig Code
    2. wahrscheinlich der falsche Code
  15. Saban

    Saban Grünschnabel

    Hi!

    Also hier mein Code für die DB-Connection:
    Code (Java):
    1. package AP2008_3;
    2.  
    3. import java.io.IOException;
    4. import java.sql.Connection;
    5. import java.sql.DriverManager;
    6. import java.sql.SQLException;
    7. import java.sql.Statement;
    8.  
    9. public class DB_Connection {
    10.     static Connection con = null;
    11.     static Statement stmt = null;
    12.    
    13.     public static void main(String [] args) throws SQLException, IOException{      
    14.         DB_Tabellen tabelle = new DB_Tabellen();
    15.         DB_Auslesen auslesen = new DB_Auslesen();
    16.        
    17.         System.out.println("\n");
    18.         System.out.println("*** Verbindungsaufbau 'DB_Connection' ***");
    19.         /* Laden des Datenbank Treibers */
    20.         try {
    21.             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    22.             System.out.println("Treiber: 'sun.jdbc.odbc.JdbcOdbcDriver' wurde geladen");
    23.         } catch (ClassNotFoundException e) {
    24.             System.err.println("Treiber-Klasse " + e + " konnte nicht geladen werden!");
    25.             System.exit(0);
    26.         }
    27.        
    28.         /* Aufbau der Verbindung */    
    29.         try {
    30.             con = DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=D:\\Programm Files\\Toolz\\Programmieren\\Datenbanken\\DB_Vorlage_AP2008_3.mdb");
    31.             System.out.println("--> Verbunden mit der Datenbank!");
    32.             System.out.println();
    33.         } catch (SQLException e) {
    34.             System.err.println("Datenbank Verbindungsfehler ' " + e + " ' !");
    35.             System.exit(0);
    36.         }
    37.        
    38.         /* Anlegen eines Statement-Objekts */
    39.         stmt = con.createStatement();
    40.        
    41.         /* Befüllen der Tabellen */
    42.         System.out.println("*** Füllen der Tabellen ***");
    43.         tabelle.fuelleTabArtikel(stmt);
    44.         tabelle.fuelleTabArtikelPreis(stmt);
    45.         tabelle.fuelleTabEinkauf(stmt);
    46.         tabelle.fuelleTabEinkaufsPosition(stmt);
    47.         tabelle.fuelleTabKunde(stmt);
    48.        
    49.         /* Transaktionsausführung bestätigen */
    50.         con.commit();
    51.        
    52.         auslesen.minPreis2007(stmt);
    53.        
    54.         /** Verbindungsabbau **/
    55.         con.close();
    56.         System.out.println();
    57.         System.out.println("*** Verbindungsabbau 'DB_Connection' ***");
    58.         System.out.println();
    59.         System.out.println();
    60.     }
    61. }
    Hier der Code für das befüllen der Tabellen:
    Code (Java):
    1. package AP2008_3;
    2.  
    3. import java.io.File;
    4. import java.io.IOException;
    5. import java.sql.ResultSet;
    6. import java.sql.SQLException;
    7. import java.sql.Statement;
    8.  
    9. public class DB_Tabellen {
    10.    
    11.     public DB_Tabellen() throws IOException{
    12.         /** Überprüfung ob Datei bereits existiert **/
    13.         String org_datei = "D:\\Programm Files\\Toolz\\Programmieren\\Datenbank Rohlinge\\DB_Vorlage_AP2008_3.mdb";
    14.         String neu_datei = "D:\\Programm Files\\Toolz\\Programmieren\\Datenbanken\\DB_Vorlage_AP2008_3.mdb";
    15.        
    16.         File file = new File(neu_datei);
    17.        
    18.         if(file.exists() == true){
    19.             file.delete();
    20.             System.out.println("Datei '" + neu_datei + "' wurde gelöscht!");
    21.             /* Startet die Konsole und Kopiert die Original Datei in den gewünschten Ordner */
    22.             Runtime.getRuntime().exec("cmd /c copy \"" + org_datei + "\" \"" + neu_datei + "\"");
    23.             System.out.println("Leere Datenbank wurde aus '" + org_datei + "' angelegt!");
    24.         }else{
    25.             Runtime.getRuntime().exec("cmd /c copy \"" + org_datei + "\" \"" + neu_datei + "\"");
    26.             System.out.println("Leere Datenbank wurde aus '" + org_datei + "' angelegt!");
    27.         }
    28.     }
    29.    
    30.     public void fuelleTabArtikel(Statement stmt){
    31.         /* String Arrays zum befüllen */
    32.         String str_Artikel[]    = new String[5];
    33.        
    34.         str_Artikel[0]  = "('71835', 'Laptop')";
    35.         str_Artikel[1]  = "('71836', 'Desktop-PC')";
    36.         str_Artikel[2]  = "('71837', 'Taschenrechner')";
    37.         str_Artikel[3]  = "('71838', 'Block')";
    38.         str_Artikel[4]  = "('71839', 'Stift')";
    39.        
    40.         /* Schleife sollte nicht länger laufen wie der Eintrag ist
    41.          * --> Es sollen 3 Einträge gemacht werden aber das Array hat 5 Felder
    42.          * Folge: Es kommt zu Exception, da die Schleife 5x durchlaufen wird und ab dem 3x 'NULL' übergeben wird !NOT NULL! */
    43.         try {
    44.             for(int index = 0; index < str_Artikel.length; index++){
    45.                 stmt.executeUpdate("INSERT INTO Artikel VALUES " + str_Artikel[index]);
    46.             }
    47.             System.out.println("Daten wurden in 'Artikel' eingelesen");
    48.         } catch (SQLException e) {
    49.             System.err.println("Daten konnten in 'Artikel' nicht eingelesen werden!");
    50.         }
    51.     }
    52.    
    53.     public void fuelleTabArtikelPreis(Statement stmt){
    54.         /* String Arrays zum befüllen */
    55.         String str_ArtikelPreis[]   = new String[6];
    56.        
    57.         str_ArtikelPreis[0]     = "('44444', '71835', '01.09.2008', '01.09.2009', 1500)";
    58.         str_ArtikelPreis[1]     = "('55555', '71836', '11.09.2008', '11.09.2010', 700)";
    59.         str_ArtikelPreis[2]     = "('66666', '71837', '15.11.2007', '16.11.2007', 100)";
    60.         str_ArtikelPreis[3]     = "('66667', '71837', '15.11.2007', '16.11.2007', 50)";
    61.         str_ArtikelPreis[4]     = "('77777', '71838', '01.12.2008', '01.12.2009', 10)";
    62.         str_ArtikelPreis[5]     = "('88888', '71839', '15.11.2008', '15.11.2009', 5)";
    63.        
    64.         try {
    65.             for(int index = 0; index < str_ArtikelPreis.length; index++){
    66.                 stmt.executeUpdate("INSERT INTO Artikelpreis VALUES " + str_ArtikelPreis[index]);
    67.             }
    68.             System.out.println("Daten wurden in 'Artikelpreis' eingelesen");
    69.         } catch (SQLException e) {
    70.             System.err.println("Daten konnten in 'Artikelpreis' nicht eingelesen werden!");
    71.         }
    72.     }
    73.    
    74.     public void fuelleTabEinkaufsPosition(Statement stmt){
    75.         /* String Arrays zum befüllen */
    76.         String str_EinkaufsPosition[]   = new String[5];
    77.        
    78.         str_EinkaufsPosition[0]     = "(1, '12345', '71835', 5, 2000)";
    79.         str_EinkaufsPosition[1]     = "(2, '23456', '71836', 1, 1200)";
    80.         str_EinkaufsPosition[2]     = "(3, '34567', '71837', 4, 150)";
    81.         str_EinkaufsPosition[3]     = "(4, '45678', '71838', 10, 25)";
    82.         str_EinkaufsPosition[4]     = "(5, '56789', '71839', 25, 15)";
    83.        
    84.         try {
    85.             for(int index = 0; index < str_EinkaufsPosition.length; index++){
    86.                 stmt.executeUpdate("INSERT INTO Einkaufsposition VALUES " + str_EinkaufsPosition[index]);
    87.             }
    88.             System.out.println("Daten wurden in 'Einkaufsposition' eingelesen");
    89.         } catch (SQLException e) {
    90.             System.err.println("Daten konnten in 'Einkaufsposition' nicht eingelesen werden!");
    91.         }
    92.     }
    93.    
    94.     public void fuelleTabEinkauf(Statement stmt){
    95.         /* String Arrays zum befüllen */
    96.         String str_Einkauf[]    = new String[5];
    97.        
    98.         str_Einkauf[0]  = "('12345', '15', '01.01.2008', 500)";
    99.         str_Einkauf[1]  = "('23456', '22', '15.08.2008', 600)";
    100.         str_Einkauf[2]  = "('34567', '30', '01.11.2008', 700)";
    101.         str_Einkauf[3]  = "('45678', '35', '01.12.2008', 800)";
    102.         str_Einkauf[4]  = "('56789', '55', '22.01.2008', 900)";
    103.        
    104.         try {
    105.             for(int index = 0; index < str_Einkauf.length; index++){
    106.                 stmt.executeUpdate("INSERT INTO Einkauf VALUES " + str_Einkauf[index]);
    107.             }
    108.             System.out.println("Daten wurden in 'Einkauf' eingelesen");
    109.         } catch (SQLException e) {
    110.             System.err.println("Daten konnten in 'Einkauf' nicht eingelesen werden!");
    111.         }
    112.     }
    113.    
    114.     public void fuelleTabKunde(Statement stmt){
    115.         /* String Arrays zum befüllen */
    116.         String str_Kunde[]  = new String[5];
    117.        
    118.         str_Kunde[0]    = "('15')";
    119.         str_Kunde[1]    = "('22')";
    120.         str_Kunde[2]    = "('30')";
    121.         str_Kunde[3]    = "('35')";
    122.         str_Kunde[4]    = "('55')";
    123.        
    124.         try {
    125.             for(int index = 0; index < str_Kunde.length; index++){
    126.                 stmt.executeUpdate("INSERT INTO Kunde VALUES " + str_Kunde[index]);
    127.             }
    128.             System.out.println("Daten wurden in 'Kunde' eingelesen");
    129.         } catch (SQLException e) {
    130.             System.err.println("Daten konnten in 'Kunde' nicht eingelesen werden!");
    131.         }
    132.     }
    133. }
    Und hier für das Auslesen aus der DB:
    Code (Java):
    1. package AP2008_3;
    2.  
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.sql.Statement;
    6.  
    7. public class DB_Auslesen {
    8.    
    9.     private ResultSet result = null;
    10.    
    11.     public void minPreis2007(Statement stmt){
    12.         try {
    13.             result = stmt.executeQuery(
    14.                     " SELECT Artikelpreis.von_Datum, Artikelpreis.bis_Datum " +
    15.                     " FROM Artikelpreis " +
    16.                     " WHERE BINDER = ( " +
    17.                     " SELECT min(Artikelpreis.Preis), Artikelpreis.ArtikelNr FROM Artikelpreis " +
    18.                     " WHERE Artikelpreis.ArtikelNr = Artikel.ArtikelNr )" +
    19.                     " AND Artikelpreis.von_Datum >= #01/01/2007#" +
    20.                     " AND Artikelpreis.bis_Datum <= #31/12/2007#");
    21.                    
    22.                     /*
    23.                     " SELECT min(Artikelpreis.Preis), Artikelpreis.von_Datum, Artikelpreis.bis_Datum" +
    24.                     " FROM Artikelpreis " +
    25.                     " WHERE Artikelpreis.von_Datum >= #01/01/2007#" +
    26.                     " AND Artikelpreis.bis_Datum <= #31/12/2007#" +
    27.                     " AND Artikel.ArtikelNr = Artikelpreis.ArtikelNr");
    28.                    
    29.                    
    30.                    
    31.                     " SELECT Artikel.ArtikelNr, Artikelpreis.ArtikelNr, Preis, von_Datum, bis_Datum, Artikelbezeichnung" +
    32.                     " FROM Artikelpreis, Artikel" +
    33.                     " WHERE Artikelpreis.ArtikelNr = Artikel.ArtikelNr" +
    34.                     " AND von_Datum >= #01/01/2007#" +
    35.                     " AND bis_Datum <= #31/12/2007#" +
    36.                     " ORDER BY Preis DESC");*/
    37.            
    38.             System.out.println("\n\n");
    39.             String str = "";
    40.             while(result.next()){
    41.                 str = result.getString("Artikelpreis.ArtikelNr") + ", " +
    42.                 result.getDouble("Preis") + ", " + result.getDate("von_Datum") + ", " +
    43.                 result.getDate("bis_Datum") + ", " + result.getString("Artikelbezeichnung");
    44.             }
    45.            
    46.             System.out.println(str);
    47.                    
    48.             System.out.println("Ausgabe des minimalen Preises des Jahres 2007");
    49.         } catch (SQLException e) {
    50.             System.err.println("Fehler beim auslesen des minimalen Preises des Jahres 2007! " + e);
    51.         }      
    52.     }
    53. }
    Die Fehlermeldung:
    Code (Java):
    1. java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Sie haben eine Unterabfrage erstellt, die mehr als ein Feld zurückgeben kann, ohne das reservierte Wort EXISTS im FROM-Abschnitt der Hauptabfrage zu verwenden. Überarbeiten Sie die SELECT-Anweisung der Unterabfrage, damit nur ein Feld abgerufen wird.
    Mehr Code hab ich nicht :)

    MfG
    Saban
    Zuletzt von einem Moderator bearbeitet: 23. Mai 2014
  16. shutdown

    shutdown Grünschnabel

    1. Mein BINDER war ein Platzhalter, damit die Lösung auch noch für andere Fälle nutzbar ist - ich versuche eigentlich immer zum nachdenken anzuregen, damit man den eigenen Code auch versteht, wenn man ihn von anderen bekommt. Wenn in deinen Tabellen nirgendwo die Spalte BINDER vorkommt, dürfte wohl klar sein, dass das nicht funktionieren kann, oder?

    2. Ist die Fehlermeldung doch wohl sehr eindeutig. Da steht, dass die Unterabfrage mehr als ein Feld zurückgibt. Und Überraschung, genau das tut sie. Was könnte man also tun?
    Richtig, die Unterabfrage so anpassen, dass nur noch ein Wert zurückgegeben wird.

    Code (Java):
    1.  
    2. " SELECT Artikelpreis.von_Datum, Artikelpreis.bis_Datum " +  
    3. " FROM Artikelpreis " +
    4. " WHERE Artikelpreis.Preis = ( " +                    
    5. " SELECT min(Artikelpreis.Preis) FROM Artikelpreis " +                    
    6. " WHERE Artikelpreis.ArtikelNr = Artikel.ArtikelNr )" +                    
    7. " AND Artikelpreis.von_Datum >= #01/01/2007#" +                    
    8. " AND Artikelpreis.bis_Datum <= #31/12/2007#");
    9.  
  17. Saban

    Saban Grünschnabel

    Hi!

    ja ok ich muss leider zugeben das das hochgradig dumm war auch wenn man grad erst mit dbs angefangen hat... TUT MIR LEID! ich war froh endlich ne Lösung zu haben.
    Nun zu deiner Aussage das mehrere Parameter zurück kommen können! Ich sage doch wähle mir den minimal Preis aus, welches Zwischen dem Datum xx.xx.xx und xx.xx.xx liegt. Minimal Preis kann doch nicht mehr als einen minimal Preis zurück geben?

    PS: Höchstwahrscheinlich lieg ich falsch würde mich also über deine Korrektur freuen!

    MfG
    Saban
  18. shutdown

    shutdown Grünschnabel

    Also:
    Dein Fehler bestand darin:
    Code (Text):
    1.  
    2. SELECT min(Artikelpreis.Preis), Artikelpreis.ArtikelNr FROM
    3.  
    Da stehen 2 Felder zwischen SELECT und FROM, folglich werden 2 Felder - nicht 1 - selektiert, daher die Fehlermeldung.

    Die korrigierte Fassung findest du bereits im letzten Post.
  19. Saban

    Saban Grünschnabel

    Hi!

    Danke der 2 Fehler ist mir nicht aufgefallen nun hab ich den Code folgendermaßen:
    Code (Java):
    1. package AP2008_3;
    2.  
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.sql.Statement;
    6.  
    7. public class DB_Auslesen {
    8.    
    9.     private ResultSet result = null;
    10.    
    11.     public void minPreis2007(Statement stmt){
    12.         try {
    13.             result = stmt.executeQuery(
    14.                     " SELECT Artikelpreis.von_Datum, Artikelpreis.bis_Datum " +
    15.                     " FROM Artikelpreis " +
    16.                     " WHERE Artikelpreis.Preis = ( " +
    17.                     " SELECT min(Artikelpreis.Preis) " +
    18.                     " FROM Artikelpreis " +
    19.                     " WHERE Artikelpreis.ArtikelNr = Artikel.ArtikelNr )" +
    20.                     " AND Artikelpreis.von_Datum >= #01/01/2007#" +
    21.                     " AND Artikelpreis.bis_Datum <= #31/12/2007#");
    22.                    
    23.                     /*
    24.                     " SELECT min(Artikelpreis.Preis), Artikelpreis.von_Datum, Artikelpreis.bis_Datum" +
    25.                     " FROM Artikelpreis " +
    26.                     " WHERE Artikelpreis.von_Datum >= #01/01/2007#" +
    27.                     " AND Artikelpreis.bis_Datum <= #31/12/2007#" +
    28.                     " AND Artikel.ArtikelNr = Artikelpreis.ArtikelNr");
    29.                    
    30.                    
    31.                    
    32.                     " SELECT Artikel.ArtikelNr, Artikelpreis.ArtikelNr, Preis, von_Datum, bis_Datum, Artikelbezeichnung" +
    33.                     " FROM Artikelpreis, Artikel" +
    34.                     " WHERE Artikelpreis.ArtikelNr = Artikel.ArtikelNr" +
    35.                     " AND von_Datum >= #01/01/2007#" +
    36.                     " AND bis_Datum <= #31/12/2007#" +
    37.                     " ORDER BY Preis DESC");*/
    38.            
    39.             System.out.println("\n\n");
    40.             String str = "";
    41.             while(result.next()){
    42.                 str = str + result.getString("Artikel.Artikelbezeichnung") + ", " +
    43.                 result.getDouble("Artikelpreis.Preis") + ", " + result.getDate("Artikelpreis.von_Datum") + ", " +
    44.                 result.getDate("Artikelpreis.bis_Datum");
    45.             }
    46.            
    47.             System.out.println(str);
    48.                    
    49.             System.out.println("Ausgabe des minimalen Preises des Jahres 2007");
    50.         } catch (SQLException e) {
    51.             System.err.println("Fehler beim auslesen des minimalen Preises des Jahres 2007! " + e);
    52.         }      
    53.     }
    54. }
    Fehlermeldung:
    Code (Java):
    1.  java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.
    tut mir leid falls ich mich dumm anstelle... :confused:

    MfG
    Saban
    Zuletzt von einem Moderator bearbeitet: 23. Mai 2014
  20. shutdown

    shutdown Grünschnabel

    Gibt dein SubSelect überhaupt ein Ergebnis zurück? (Einfach mal direkt in Access ausprobieren)

    Ich behaupte nein, da du einen JOIN auf die Tabelle Artikel versuchst, ohne dass die Tabelle überhaupt genannt ist. Ist sie denn überhaupt notwendig?

Diese Seite empfehlen