zusammenfassen von zeilen

komplexor

Mitglied
ich versuche mich gerade dabei, unterbrechungen von zwei ereignissen zusammenzufassen, bei dem der zeitunterschied größer 14 sek ist und sichere die ergebnisse dann in eine tabelle.
dazu hole ich mir von einer anderen tabelle die startzeit und die endzeit der unterbrechung.
nun hätte ich gerne, dass aufeinanderfolgende unterbrechungen zusammegefasst werden.
das aktuelle ergebniss sieht wie folgt aus:

id_obj_______start_______________end________diff
1 BALL 09.06.2011 13:56:10 09.06.2011 13:56:40 30
2 BALL 09.06.2011 13:57:10 09.06.2011 13:57:25 15
3 BALL 09.06.2011 13:57:25 09.06.2011 13:57:41 16
4 BALL 09.06.2011 13:57:41 09.06.2011 13:58:25 44

herauskommen soll das im idealfall aber so:

id_obj_______start_______________end________diff
1 BALL 09.06.2011 13:56:10 09.06.2011 13:56:40 30
2 BALL 09.06.2011 13:57:10 09.06.2011 13:58:25 115

ich habe die stelle im code, wo ich denke das eine weitere bedingung eigefügt werden muß, kommentiert mit "!!!!!!!!!!!!!!!!!!!!!!!"

hoffe ich habe mich verständlich ausgedrückt und jmd hat ne lösung für mich, stehe irgendwie auf dem schlauch.

Java:
private synchronized void findInterruption() {
		rsStation = dbi.getExistingStationsFromEpochLog(date); 
		try {
			while (rsStation.next()) { //Für jede Station
				Timestamp tsInterruptiontStartTime = new Timestamp(0);
				Timestamp tsInterruptionEndTime = new Timestamp(1);
				Timestamp tsInterruptionEndTimeBefore = new Timestamp(2);
				ResultSet rsInterruptionsStartTime = null;
				ResultSet rsInterruptionEndTime = null;
				String interruptionStartTime = null;
				String interruptionEndTime = "";
				String station = null;
				long timeDiff = 0;
				boolean missingInterruptionEndTime = false;
				
				station = rsStation.getString(1);
				rsInterruptionsStartTime = dbi.getStationInterruptionStart(station,
						date, interruptionTimeLimit);
				
				while (rsInterruptionsStartTime.next()) {//für jede Unterbrechung der Station
					id = rsInterruptionsStartTime.getInt(1);
					tsInterruptiontStartTime = rsInterruptionsStartTime.getTimestamp(3);
					interruptionStartTime = df.format(tsInterruptiontStartTime);
					sats = rsInterruptionsStartTime.getInt(6);
										
					if (sats < 5) {
						 insufficientSats = true;
					}else {
						 insufficientSats = false;
					}
					
					// Ermittelt das Ende der Interruption, 
					// bzw. die nächste verfügbare Station nach interruptionStartTime
					rsInterruptionEndTime = dbi.getStationInterruptionEndTime(station, interruptionStartTime, date);

					if (rsInterruptionEndTime.next()) { //falls Ende der Unterbrechung vorliegt
						tsInterruptionEndTime = rsInterruptionEndTime.getTimestamp(1);
						interruptionEndTime = df.format(tsInterruptionEndTime);
						missingInterruptionEndTime = true;
					} else {//wenn kein Ende der Unterbrechung, dann Endzeit = Startzeit --> Zeitdiff = 0
//						System.out.println("Kein Ende der Unterbrechung für "+station);
						tsInterruptionEndTime = rsInterruptionsStartTime.getTimestamp(3);
						interruptionEndTime = df.format(tsInterruptionEndTime);
						missingInterruptionEndTime = false;
					}
//!!!!!!!!!!!!!!!!----------ich denke hier muß angesetzt werden, aber ich weiß nicht wie------------!!!!!!!!!!!!!!!!!!!!!!!						
					if (tsInterruptionEndTime.equals(tsInterruptionEndTimeBefore) && missingInterruptionEndTime) {
						continue;
					} else {
						if (interruptionEndTime != null) {
							timeDiff = tsInterruptionEndTime.getTime()-tsInterruptiontStartTime.getTime();
						
							tempQuery.append("SELECT '" + station + "', '"
									+ interruptionStartTime + "', '"
									+ interruptionEndTime + "', " 
									+ (int) timeDiff/1000 + ", '"  
									+ insufficientSats+ "'\n UNION ALL \n");
							tsInterruptionEndTimeBefore = tsInterruptionEndTime;
						}
					}
				}
			}
			while (!successfullEntry) {
				if (tempQuery.toString().contains("UNION ALL")) {
					tempQuery.delete(tempQuery.lastIndexOf("UNION ALL"),tempQuery.length());
				}
				else {
					return;
				}
				successfullEntry = dbi.inputDatasetStationInterruption(tempQuery); 
			}
		}//END: try
		catch (SQLException e) {
			return;
		}
	}//END: startCalculate()
 

bronks

Top Contributor
Ich habe mir Dein Problem jetzt schon eine Weile angesehen und meine, daß Du es zu umständlich bzw. kompliziert lösen möchtest. In Deinem Code steht leider so viel um das eigentliche Problem herum, daß wenigstens ich nicht verstehe was an manchen Ecken warum passiert.

Wenn Du zu Deinem Problem ein kleinen eigenständlich laufenden Beispielcode posten würdest, welcher seine Daten z.B. aus einer Liste oder einem Array bezieht, dann könnte man Dir besser helfen, falls Du dabei Deinen Fehler nicht schon selbst entdeckst.
 

komplexor

Mitglied
Hallo bronks,

besten dank für deine mühe.
das problem hat sich allerdings erledigt. ich habe bemerkt, das ich die falschen ergebnisse miteinander verglichen habe.
zwar läuft es noch nicht, aber ich habe den fehler erkannt und denke jetzt werd ich es hinbekommen.

---------------------------------------------------
99% aller fehler sitzen vor dem bildschirm ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D 2 Abfragen zusammenfassen Datenbankprogrammierung 7
D MySQL Zusammenfassen von Records in ein Record(Merge) Datenbankprogrammierung 7
T MySQL Select: Zusammenfassen von Daten und bilden von Durchschnitt? Datenbankprogrammierung 4
O SQL: Zusammenfassen von Datensätzen Datenbankprogrammierung 2
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
Kirby.exe Tabellen Zeilen combinen und splitten Datenbankprogrammierung 3
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
E Wie kann man bestimmte Zeilen der Tabelle rot markieren? Datenbankprogrammierung 1
M DB: Mehrere Zeilen in einer Zeile zusammenführen Datenbankprogrammierung 10
G SELECT liefert leere Zeilen Datenbankprogrammierung 32
B Doppelte Zeilen einer Doppelten Spalte aus einer Tabelle entfernen. Datenbankprogrammierung 2
S Verkettung von Spalteninhalten aus mehreren Zeilen Datenbankprogrammierung 10
O Mittelwert über mehrere Zeilen Datenbankprogrammierung 11
E Aus einer Tabelle Zeilen mit doppeltem Eintrag holen? Datenbankprogrammierung 4
G Spalten Namen auslesen und Zeilen daten auslesen Datenbankprogrammierung 17
Z Zeilen-Anzahl abfragen bei Datenbank Datenbankprogrammierung 4
O Size ResultSet betrachtete Zeilen "löschen" Datenbankprogrammierung 5
J Alle Spalten und Zeilen eines ResultSets ausgeben ? Datenbankprogrammierung 2

Ähnliche Java Themen


Oben