Ich habe vor kurzem eine Abfrage in SQL erstellt, die ich verwenden kann, um unser Zahlungsprotokoll anzuzeigen und eine durchschnittliche Anzahl von Zahlungen pro Stunde über einen bestimmten Zeitraum zu ermitteln. Ich bin mir sicher, dass es Reporting-Anwendungen von Drittanbietern gibt, die viel besser für die Art von Berechnungen geeignet sind, die ich versuche. Aber nur zum Spaß bin ich neugierig darauf, welche anderen Methoden Sie verwenden könnten T-SQL), um die gesuchten Daten zu erhalten. Ich weiß, es ist eine dumme Frage, also werde ich nicht beleidigt sein, wenn du mich abstimmst. Aber für jeden anderen da draußen, der wie ich gelangweilt ist, kannst du deine anderen Lösungen posten.Optimieren einer Abfrage zum Erstellen von Durchschnitten
Die Tabelle wird mit einer Spalte [CreateDate] eingerichtet, bei der es sich um den DATETIME-Wert handelt, wenn die Zahlung auf das Konto gebucht wird. Ich benutze dies, um zu bestimmen, welche Stunde sie in die Zahlung.
CREATE TABLE #TempTimes
(
[Time] DATETIME,
)
DECLARE @numDays INT
SET @numDays = 10
DECLARE @time DATETIME
SET @time = DATEADD(dd, DATEDIFF(dd, 0, GETDATE() - @numDays), 0)
WHILE @time < GETDATE()
BEGIN
INSERT #TempTimes
VALUES (@time)
SET @time = DATEADD(hour, 1, @time)
END
GO
/*
I have to join in a table with all of the hours for the time span I'm querying against,
because otherwise, the AVG function won't calculate in the hours where no payments were made.
*/
SELECT DATEPART(hour, [Time]) [Hour], AVG(CAST([Count] AS DECIMAL)) [Average]
FROM
(
SELECT [Time], CASE WHEN [Count] IS NULL THEN 0 ELSE [Count] END [Count]
FROM #TempTimes tt
LEFT JOIN
(
SELECT DATEADD(hour, DATEDIFF(hour, 0, [CreateDate]), 0) [hour], COUNT(*) [Count]
FROM [dbo].[PaymentLog]
GROUP BY DATEADD(hour, DATEDIFF(hour, 0, [CreateDate]), 0)
) t1 ON t1.[hour] = tt.[time]
) t2
GROUP BY DATEPART(hour, tt.[Time])
GO
DROP TABLE #TempTimes
GO
CJ
Guter Punkt. Ich könnte UNION die Tabelle und dann eine Summe ([Count]) und GROUP BY in allen Zeilen später, um die Daten zusammen zu tun. Das wäre wahrscheinlich weniger Arbeit für die Proc. – regex