Gruop by geht nicht aber Order by Wieso

ramzymamzy

Mitglied
Hi Leute,
muss eine SQL Abfrage auf eine Tabelle Gruppieren!

Code:
	public ResultSet retrieveFailedLogonsbyDate(Connection theConnection){	
		
		ResourceBundle myResources = PropertyResourceBundle.getBundle("Result");
		
	
		  
		ResultSet rs = null;
	  try{
	  
		try {  
			String valueA = myResources.getString("valueA"); 
			String valueB = myResources.getString("valueB");
	
			SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
			Date von = sdf.parse(valueA);
			Date bis = sdf.parse(valueB);
				
			valueA = sdf.format(von);
			valueB = sdf.format(bis);
						
			Statement stmt = theConnection.createStatement();
			
			rs = stmt.executeQuery("SELECT DETAIL FROM HISTORY WHERE ACTION = 'logon' AND SUBACTION = 'failed' AND TIMESTAMP BETWEEN '"+valueA+"' AND '"+valueB+"' ORDER BY TIMESTAMP");
			
			  while (rs.next()) {
				 String s = rs.getString("DETAIL");
				 if (s!=null){
				 System.out.println("Fehlanmeldungen zwischen dem '"+valueA+"' und '"+valueB+"': " + s);
				 }
			  }
		  }  
		   catch (SQLException e) {
		   }
	  }
	  catch(ParseException pe){
	  }

ORDER BY TIMESTAMP geht! aber nicht GROUP BY TIMESTAMP
kann jemand helfen?
 
hast Du schon mal versucht Dein Statement mit "group by" der Datenbank direkt zu geben ohne eigenes Anwendungsprogramm?
Funktioniert das denn?

Takidoso
 
Hi, soweit ich weiss muss bei " group by " das Attribut nach dem gruppiert werden soll auch vor dem " From " stehen. Also bei dir :
Code:
SELECT detail, timestamp FROM ... WHERE ... GROUP BY timestamp;

Vielleicht funktionierts ja so ...
 
Hallo,

poste doch mal den SQL und zwar den, der im Programm erzeugt wird.

Dazu machst du folgende Änderung:
Code:
rs = stmt.executeQuery("SELECT DETAIL FROM HISTORY WHERE ACTION = 'logon' AND SUBACTION = 'failed' AND TIMESTAMP BETWEEN '"+valueA+"' AND '"+valueB+"' ORDER BY TIMESTAMP");
Du solltest evtl. den Sql erst einer Variablen zuweisen,
Code:
String sql = "SELECT DETAIL FROM HISTORY WHERE ACTION = 'logon' AND SUBACTION = 'failed' AND TIMESTAMP BETWEEN '"+valueA+"' AND '"+valueB+"' ORDER BY TIMESTAMP"; 	
            rs = stmt.executeQuery(sql);
    System.out.println(sql);
dann kannst du dir den Inhalt der Variablen im Debug-Mode anzeigen oder an der Konsole ausgeben lassen. Die Fehlesuche ist dann einfacher.

Denn ein GROUP BY sollte eigentlich keine Probleme machen.

@seppltrallala
Das Attribut, nach dem gruppiert werden soll, muss im SELECT nicht aufgeführt sein.
 
Zuletzt bearbeitet:
nein war leider nichts! habs mal so probiert:

Code:
String sql = "SELECT DETAIL, TIMESTAMP FROM HISTORY WHERE ACTION = 'logon' AND SUBACTION = 'failed' AND TIMESTAMP BETWEEN '"+valueA+"' AND '"+valueB+"' GROUP BY TIMESTAMP"; 	
rs = stmt.executeQuery(sql);

noch vorschläge?
 
Hallo,

hast du die den Sql mal auf der Konsole ausgegeben?

Bitte einmal den SQL posten.
Sowie den SQL direkt auf der DB ausführen und eventuelle Fehlermeldungen posten.

Gib doch mal die Datentypen von DETAIL, TIMESTAMP, ACTION, SUBACTION an.

Welche Datenbank nutzt du? (wenn ich mich richtig erinnere Oracle)

:edit
alle im SELECT angegebenen Attribute müssen gruppiert werden.
Code:
 String sql = "SELECT DETAIL, TIMESTAMP FROM HISTORY WHERE ACTION = 'logon' AND SUBACTION = 'failed' AND TIMESTAMP BETWEEN '"+valueA+"' AND '"+valueB+"' GROUP BY DETAIL,TIMESTAMP"; 	
  rs = stmt.executeQuery(sql);
 
Zuletzt bearbeitet:
Zurück