Wie man den Durchschnitt einer DATEDIFF()?
Ich habe die folgende Abfrage:
SELECT
DATEDIFF(day, DateUsed, DateExpires) AS DaysBetweenExpirationAndUse
FROM tblOffer
Wie bekomme ich die Durchschnittliche Anzahl der Tage von der DaysBetweenExpirationAndUse
Spalte?
- Können Sie nach Ihrem code, wo Sie versuchten mit AVG?
- Was meinst du mit "offensichtlich nicht funktioniert"? Ich hätte angenommen, dass es funktioniert. Erhalten Sie falsche Ergebnisse oder eine Fehlermeldung? Die Ergebnisse bekommen Sie, und wie unterscheidet es sich von dem, was Sie bekommen? Was sind die Fehlermeldungen? Eine Sache, die ich mir vorstellen könnte, counter-intuitive ist, dass SQL Server
AVG
bedeutet die Mittelung mit integer-Logik für integer-Eingang. Wenn dies der Fall ist, mitAVG(CAST(DATEDIFF(d, DateUsed, DateExpires) as FLOAT))
geben könnte intuitiver Ergebnis. - Für die Zukunft, der Satz "hat nicht funktioniert" ist zu vage, um nützlich zu sein. Merken Sie sich das nächste mal, wenn Sie Hilfe anfordern.
- Einig mit den anderen darüber, wie nutzlos "hat nicht funktioniert" ist. Wenn deine ursprüngliche Frage hatte enthalten den eigentlichen code, den du versucht hast und die Fehlermeldung, die Sie erhielten, es hätte viel mehr auf der Hand. Garbage in, Garbage out. Seien Sie nicht überrascht zu werden, bekommen feedback, wenn Sie Fragen, eine scheiß Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser sollte funktionieren:
Wenn Sie wollen Dezimalstellen in Ihre AVG:
Wenn Sie möchten, wählen Sie die
AVG
und andere Felder, die auch ohne Gruppierung:diese sql ausführen könnte?
dies ist mein test:
aber gute Antwort ist:
sollte funktionieren. Beachten Sie, dass seit
DATEDIFF
gibt einen ganzzahligen Wert zurück, das Ergebnis auch ein integer sein.Wenn Sie wollen, dass die "exakte" (soweit floating point bekommt) Durchschnittliche, verwenden Sie
DATEDIFF
Funktion hat nichts zu tun mit diesem problem der Berechnung der durchschnittlichen(AVG) von INT-Werten. Das Verhalten von SQL Server ist anders als andere Server ist aber nach ANSI-SQL-standardist (meiner Meinung nach) nicht hilfreich in diesem Fall. Die meisten Menschen erwarten, dass
AVG(INT value)
wird in einemNUMERIC/DECIMAL/FLOAT/REAL
Ergebnis, aber das Ergebnis wird abgeschnitten INT-Wert. Die Lösung ist, zu konvertieren [WINZIGEN|KLEIN|BIT]INT-Werte zuDECIMAL/NUMERIC
mitCONVERT(DECIMAL(p,s)/NUMERIC(p,s), ...)
oder einfach durch multiplizieren mit1.
oder1.0
.Beispiel: