# zusammenfassen von zeilen



## komplexor (9. Jun 2011)

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.


```
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 (9. Jun 2011)

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 (10. Jun 2011)

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


----------

