PDA

Vollständige Version anzeigen : Berrechnen/A97


KF
08.08.2001, 08:23
Hallo...
habe folgende Frage:
Wie berechne ich hier die gesamten jahre mit Beachtung das sich Daten überschneiden und das soll abgezogen werden

Abfrage_Zeiträume mit den Spalten und inhalt
Index
2
2
2
2
2

Von
01.01.00
01.01.01
02.02.02
03.03.03
05.05.05

Bis
01.01.03
01.01.02
03.03.03
03.03.04
05.05.06

Danke euch

Kurt aus Kienitz
08.08.2001, 08:54
Hallo,

Auch auf die Gefahr hin, daß ich Deine Frage nicht richtig verstanden habe, probier mal folgende Abfrage aus:

SELECT VonBis.Index, DateDiff("yyyy", Min(VonBis.Von) , Max(VonBis.Bis)) as AnzJahre
FROM VonBis
GROUP BY VonBis.Index;

VonBis ist der Name der Tabelle ;)
HTH

KF
08.08.2001, 09:08
ich versuche es mal
danke schön
Kristin

KF
08.08.2001, 09:31
leider ist das noch nicht das richtige
da sich die daten überschneiden
und das muss berücksichtigt werden
irgendwie die tage(Jahre) abziehen...wenn Datum sich überschneidet
zb

13.12.01 bis 18.12.02
18.12.01 bis 23.12.01

Kurt aus Kienitz
08.08.2001, 09:37
Hallo nochmal,

Irgendwie verstehe ich das noch immer nicht.

Folgendes Berechnungsbeispiel:
01.01.2001 - 01.01.2003 = 2 Jahre
01.01.2002 - 01.01.2004 = 2 Jahre
Summe = 4 Jahre
Überschneidung 01.01.2002 - 01.01.2003 = 1 Jahr
Endergebnis = 3 Jahre

Wenn ich jetzt vom 01.01.2004 (max. Bis-Datum) den 01.01.2001 (min. Von-Datum) abziehe bekomme ich als Ergebnis 3 Jahre.

Wo ist mein Denkfehler ?

KF
08.08.2001, 09:53
Hallo
ich habe deine Formel ausprobiert
leider ist das ergebnis bei mir nicht richtig
ich bekomme anstatt 5 jahre 6 jahre heraus
bei diesen daten
Von Bis
01.01.00 01.01.03
01.01.00 01.01.03
01.01.01 01.01.02
02.02.02 03.03.03
03.03.03 03.03.04
05.05.05 05.05.06

KF
08.08.2001, 10:02
uups ich glaub ich kann nicht mehr rechnen!!

Entschuldigung
*grins
kommt hin....
danke

KF
08.08.2001, 10:23
Hab doch noch ein Problem
die formel nimmt die Lücken zwischen den daten nicht raus

wie zb hier

Von 02.02.01 bis 02.02.03

Von 20.05.25 bis 25.12.28

das sind eigentlich 6 Jahre
aber er gibt mir 27 jahre aus

WAG
08.08.2001, 10:31
Hi Ihr zwei,
ich will Euch ja nicht die gute Laune verderben, aber was macht ihr wenn der Satz
von 03.03.03 bis 03.03.04 fehlt?

Dieter

KF
08.08.2001, 10:34
Wie fehlt???

WAG
08.08.2001, 10:57
Entschuldigung. Wenn es nicht vorkommen kann, daß zu einem Jahr kein Eintrag existiert hab ich nichts gesagt.

Dieter

Kurt aus Kienitz
08.08.2001, 11:02
Hallo,

Ich ahne Schlimmes, Kompliziertes :)

Man wird wohl doch alle Einzeldifferenzen ermitteln müssen, diese addieren und dann die Überschneidungen heraussuchen müssen...

@WAG: Hast Du da eine Idee ?

KF
08.08.2001, 11:05
Es sind gefilterte und sortierte Daten
einer bestimmten Person und daraus sollen die gesamten jahre berechnet werden
es kann dabei zu überschneidungen oder pausen kommen...

und da weiß ich einfach nicht weiter

WAG
08.08.2001, 11:22
Hi Kurt,
wenn ich eine Idee gehabt hätte, hätte ich geantwortet. Aber außer VBA fallt mir momentan nichts ein.

Dieter

KF
08.08.2001, 11:25
Schade
aber wenn ihr doch etwas wißt sagt gleich bescheid ja

danke schön

Kurt aus Kienitz
08.08.2001, 11:37
Hallo nochmal,

1. Problem ist, das man die Zeilen nicht eindeutig identifizieren kann, wenn Index, VonDatum und BisDatum in zwei Zeilen identisch sind.

Kannst Du durch die Datenermittlung da irgendeine ID beisteuern ?

Das ganze sollte dann so aussehen:

ID - Index - Von - Bis
1 - 2 - 01.01.2000 - 01.01.2003
4 - 2 - 01.01.2000 - 01.01.2003
7 - 2 - 02.02.2002 - 03.03.2003

KF
08.08.2001, 11:48
nein
kann man nicht aber so eine art laufende nummer in der Abfrage angeben??

weiß aber nicht wie so etwas geht

Kurt aus Kienitz
08.08.2001, 11:54
Um so eine laufende Nummer in der Abfrage erzeugen zu können muß man die Zeilen irgendwie unterscheiden können :(

Können wir die Daten in eine temporären Tabelle schaufeln ?
Dort könnten wir uns mit einer AutoWert-Spalte die eindeutige ID anlegen.

C. Palmetshofer
08.08.2001, 12:12
Hi,

so oder so ähnlich sollte es funktionieren:

Function findYears()
Dim DB As Database, RS As Recordset
Dim tmpvon As Date, tmpbis As Date
Dim tmpCnt As Integer

Set DB = CurrentDb
Set RS = DB.OpenRecordset("select von, bis from tblTest order by von")
If RS.RecordCount > 0 Then
Do Until RS.EOF
If RS!von > tmpbis Then
tmpvon = RS!von
Else
tmpvon = tmpbis + 1
End If
If RS!bis > tmpvon Then
tmpbis = RS!bis
tmpCnt = tmpCnt + DateDiff("d", tmpvon, tmpbis)
End If
RS.MoveNext
Loop
End If
RS.Close
Set RS = Nothing

Debug.Print tmpCnt / 365
findYears = DateDiff("yyyy", 1, CDate(tmpCnt))

End Function


Gruss