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.
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()