PDA

Vollständige Version anzeigen : Durchschnittliche Bearbeitungszeit berechnen


dand_dd
27.04.2011, 10:10
Hallo,

Ich habe eine Tabelle mit mehreren Daten Feldern.
Ich muss eine durchschnittliche Bearbeitungszeit berechnen.


ID D1 D2 D3 D4
1 07.04.2011 10.03.2011 30.04.2011 20.03.2011
2 06.04.2011 30.03.2011 30.05.2011 20.03.2011



Hier z.b : Durchschnittliche Bearbeitungszeit = (122) / 2 = 61
Zuerst ich muss für jede ID welches Datum ist die kleinste und welche ist die größte und dann ein Datediff machen
Danach muss ich mit diese Werten (Anzahl Tagen nach Datediff) ein AVG machen.

Wie identifiziere ich welche Datum brauche ICH für Datediff?


mit 2 Datum Feldern:
Select avg(Datediff(d, d1, d2)) as dauer from dbo.test_date


Danke

avogt_at_home
27.04.2011, 10:31
Hallo,
wie kommst du auf die 122?
Bearbeitungszeit bedeutet immer eine Differenz von Beginn bis zum Ende der Bearbeitung, und nicht nur ein einziges Datum.

Vieleicht erläuterst du genauer was du meinst und was das für Werte in der Tabelle genau sind.

Gruß Andreas

dand_dd
27.04.2011, 10:45
Hallo


ID D1 D2 D3 D4
1 07.04.2011 10.03.2011 30.04.2011 20.03.2011
2 06.04.2011 30.03.2011 30.05.2011 20.03.2011

Für ID = 1 :
- kleinste Datum = 10.03.2011
- grösste Datum = 30.04.2011
- Datediff (d, 10.03.2011, 30.04.2011) = 51

gleich bei Id = 2, Datediff = 71

Dann mit AVG(51+71) = 61

Das funktioniert nur mit 2 Datumsfeldern.

Mein Problem ist wie identifiziere ich welche Datum ist die kleinste und welche die größte ist (von d1, d2, d3, d4).

Größtes Datum - kleinstes Datum = Bearbeitungszeit für ein Produkt

avogt_at_home
27.04.2011, 11:06
Hallo,
Datediff (d, 10.03.2011, 07.04.2011) = 51

Klar, weil der März seit neuestem über 53 Tage hat oder was?
Überschlägig kommen da 28/29 Tage heraus, und keine 51.

Formatiere das Datum um in das Format YYYYMMDD, die gleinste Zahl ist das kleinste Datum.

Andreas

ebs17
27.04.2011, 11:10
Mit einer "ordentlichen" Tabellenstruktur (ID, Datumswert, Merkmal) könnte man per Abfrage Minimum und Maximum eines Datumswertes pro ID ermitteln und nachfolgend Differenzen und Durchschnitte bilden.

Bei Deiner besonderen Tabellenstruktur musst Du Dir jeweils eine Funktion schreiben und diese datensatzweise einsetzen, wo aus dem Datumsfelder-Array das Minimum/Maximum ermittelt wird, etwa ...
Public Function MaxColumn(ParamArray lngArr() As Variant) As Long
Dim i As Integer
Dim max As Long

max = lngArr(0)
If UBound(lngArr()) > 0 Then
For i = 1 To UBound(lngArr())
If lngArr(i) > max Then max = lngArr(i)
Next
End If
MaxColumn = max
End Function

dand_dd
27.04.2011, 11:38
Hallo,

Wenn ich ein Erstellungsdatum weitere datumsfeldern habe, dann kann ich ein datediff zwischen Erstellungsdatum und jede andere feld und am ende kann ich ein max oder ein min machen.

So etwas :

Select ID, Max(Datediff(dd, erstellungsdatum, d1) as dauer1, Datediff(dd, erstellungsdatum, d2) as dauer2, Datediff(dd, erstellungsdatum, d3) as dauer3) as Maximum
from test_date

Aber geht nicht. Was ist falsch?

ebs17
27.04.2011, 11:58
Was ist falsch?
Aggregieren (wie z.B. ein Maximum finden) ist innerhalb von SQL an einige Regeln (Syntax) gebunden, die man einhalten muss. Mit Try&Error kommst du hier nicht weit. (Den Versuch kommentiere ich besser nicht.)

Übrigens halte ich Dein Feedback auf Hinweise nicht für überzeugend ...

Lanz Rudolf
27.04.2011, 12:01
Hallo
evtl. liest Du einmal in der OH (Online Hilfe) über Datediff
cursor auf Datediff setzen und F1 Drücken.

ebs17
27.04.2011, 12:09
evtl. liest Du einmal in der OH (Online Hilfe) über Datediff
Das hilft aber nicht, wenn man nicht die notwendigen Argumente dazu bekommt.

Lanz Rudolf
27.04.2011, 12:15
hallo
überigens ich denke nicht das Du mit Dmax Dmin das grösste/kleinste Datum
aus einem DS(DatenSatz) einer Zeile bekommst
da musst Du evtl. schon so was machen:

Kleinstes/Grösstes Datum aus mehreren Felder (mit Array)Die Function Function fncMiMaDat gibt das Kleinste oder Gröste der mitgegeben Datümer zurück
Je nach Parameter Part (G Grösstes / K Kleinstes
Kleinstes/Grösstes Datum aus mehreren Felder die in VarP Daten können String od. Date sein
aber es müssen gültige Datum sein ! sonst kommt ein Fehler und weden durch ein Komma (,) getrent.
Getestet mit bis 25 Datum’s.

Public Function fncMiMaDat(PArt As Variant, ParamArray VarP() As Variant) As
Date
‘ Kleinstes/Grösstes Datum aus mehreren Felder
‘’ die in VarP Daten können String od. Date sein
‘’ aber es müssen gültige Datum sein ! sonst kommt ein Fehler
‘ Aaufruf: ?fncMiMaDat("K","12.12.2006","14.12.2006","01.12.2008") gibt 01.12.2006
' mit Felder fncMiMaDat("K", f1, f2, f3) oder fncMiMaDat("G", f1, f2, f3)
Dim VarW As Variant
Dim LngI As Long
Dim DatMin As Date
DatMin = DateValue("01.01.0100") ' kleinst mögliches Datum
VarW = DatMin
For LngI = LBound(VarP) To UBound(VarP)
If IsDate(VarP(LngI)) Then
Select Case PArt
Case "K"
If (VarW = DatMin) _
Or (DateValue(VarP(LngI)) < VarW) Then
VarW = DateValue(VarP(LngI))
End If
Case "G"
If (VarW = DatMin) _
Or (DateValue(VarP(LngI)) > VarW) Then
VarW = DateValue(VarP(LngI))
End If
End Select
End If
Next LngI
fncMiMaDat = VarW
End Function
Beispiel Aufruf:
Aufruf: ?fncMiMaDat("K","12.12.2006","14.12.2006","01.12.2008") gibt 01.12.2006
Oder mit Felder ?fncMiMaDat("K", f1, f2, f3) oder ?fncMiMaDat("G", f1, f2 , f3 ,f4 ,f5)


@Eberhard Du Bist zu Schnell ich war noch nicht Fertig ;)
Jetzt habe ich den nächsten Teil meiner Antwort Fertig ! :)
Sorry habe Dein Beitrag in #5 nicht gesehen :(

dand_dd
28.04.2011, 09:20
Erledigt:

Select AVG(MaxValue) as Average_All from
(Select
ID,
Max(Col) as MaxValue
From
(
Select ID, abs(Datediff(dd, erstellungsdatum, d1)) as d1, abs(Datediff(dd, erstellungsdatum, d2)) as d2, abs(Datediff(dd, erstellungsdatum, d3)) as d3
from test_date
) as test_date
Unpivot
(Col FOR ListOfColumns IN ( d1, d2, d3)) as p group by ID) p

Danke