Benutzer mit den meisten Antworten
Trend ermitteln

Frage
-
Hallo,
bin wieder mal ziemlich hilflos.
mit dem folgenden SQL-Statement habe ich mir eine Tabelle erzeugt, in der Einträge eines Kalenderwochentages gezählt werden. Mich interessieren also die Spalten[Anzahl_syscreadat] und [ueberfaellig]
Jetzt möchte ich gern zwei neue Spalten anlegen - nämlich Trend_Anzahl_syscreadat und Trend_ueberfaellig .Für die Spalte Trend_Anzahl_syscreadat sollen die Werte der Spalte [Anzahl_syscreadat] addiert werden und durch die jeweilige Anzahl der Zeilen geteilt werden
Analog gilt für die neue Spalte Trend_ueberfaellig (eben nur bezogen auf [ueberfaellig]).Wie kann ich das umsetzen?
DANKE!
select alle.syscreadat ,convert(varchar, alle.syscreadat, 104) as syscreadat_vier ,DATEPART(year, alle.syscreadat) as Jahr ,DATEPART(week, alle.syscreadat) as Woche ,DATEPART(weekday, alle.syscreadat) as Wochentag --1 = Sonntag ,alle.Anzahl_syscreadat ,ueber.ueberfaellig from ( SELECT syscreadat ,COUNT(convert(varchar, syscreadat, 104)) AS Anzahl_syscreadat FROM sv_pwa_tasks01 GROUP BY syscreadat )alle join ( select syscreadat ,COUNT(convert(varchar, syscreadat, 104)) AS ueberfaellig FROM sv_pwa_tasks01 where TaskDueDate <= syscreadat GROUP BY syscreadat )ueber on ueber.syscreadat = alle.syscreadat ORDER BY syscreadat
- Bearbeitet Olaf113 Freitag, 8. März 2019 06:34
Antworten
-
Gelöst.
Das Zauberwort heißt gleitender Durchschnitt.
https://docs.microsoft.com/de-de/sql/t-sql/functions/avg-transact-sql?view=sql-server-2017#e-using-the-over-clause
Alle Antworten
-
Hi,
poste den Code bitte über den "Codeblock einfügen" Button in der Symbolleiste des Editors. Dann ist der auch lesbar.
Dazu bitte ein CREATE TABLE Statement für die Ausgangstabelle(n), INSERT INTO Statements für Beispieldaten und passend zu den Beispieldaten dann das gewünschte Ergebnis.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Bearbeitet Stefan FalzModerator Donnerstag, 7. März 2019 15:04
-
Hi,
poste den Code bitte über den "Codeblock einfügen" Button in der Symbolleiste des Editors. Dann ist der auch lesbar.
Dazu bitte ein CREATE TABLE Statement für die Ausgangstabelle(n), INSERT INTO Statements für Beispieldaten und passend zu den Beispieldaten dann das gewünschte Ergebnis.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
Ich versuch das mal:
CREATE TABLE [dbo].[sv_pwa_tasks01]( ,[syscreadat] [datetime] ,[TaskDueDate] [datetime] ,[RecordStatus] [int] ) ON [PRIMARY] GO
INSERT INTO sv_pwa_tasks0 (syscreadat, TaskDueDate, cordStatus ) VALUES ('2017-05-13 03:08:28.370', '2017-03-02 00:00:00.000', '100') , ('2017-05-13 03:08:28.370', '2017-03-16 00:00:00.000', '100') , ('2017-05-13 03:08:28.370', '2017-03-01 00:00:00.000', '100') , ('2017-05-13 03:08:28.370', '2017-05-17 00:00:00.000', '100') , ('2017-05-14 03:08:28.370', '2017-04-01 00:00:00.000', '100') , ('2017-05-14 03:08:28.370', '2017-03-17 00:00:00.000', '100') , ('2017-05-14 03:08:28.370', '2017-06-01 00:00:00.000', '100') , ('2017-05-14 03:08:28.370', '2017-06-17 00:00:00.000', '100') , ('2017-05-14 03:08:28.370', '2017-01-12 00:00:00.000', '100') , ('2017-05-14 03:08:28.370', '2017-12-17 00:00:00.000', '100') , ('2017-05-14 03:08:28.370', '2017-05-04 00:00:00.000', '100') , ('2017-05-15 03:08:28.370', '2017-04-01 00:00:00.000', '100') , ('2017-05-15 03:08:28.370', '2017-03-17 00:00:00.000', '100') , ('2017-05-15 03:08:28.370', '2017-06-01 00:00:00.000', '100') , ('2017-05-16 03:08:28.370', '2017-07-02 00:00:00.000', '10') , ('2017-05-16 03:08:28.370', '2017-08-05 00:00:00.000', '10') , ('2017-05-16 03:08:28.370', '2017-05-20 00:00:00.000', '10') , ('2017-05-16 03:08:28.370', '2017-06-21 00:00:00.000', '10') , ('2017-05-16 03:08:28.370', '2017-05-04 00:00:00.000', '10')
- Bearbeitet Olaf113 Freitag, 8. März 2019 07:20
-
Hallo Olaf113,
wenn ich das richtig verstanden habe, evtl. so:
WITH temp AS ( SELECT syscreadat, count(*) Anzahl_syscreadat, datePart(YEAR, syscreadat) AS Jahr, datePart(WEEK, syscreadat) AS Woche, datePart(WEEKDAY, syscreadat) AS Wochentag --1 = Sonntag FROM dbo.sv_pwa_tasks01 GROUP BY syscreadat, datePart(YEAR, syscreadat), datePart(WEEK, syscreadat), datePart(WEEKDAY, syscreadat)) SELECT syscreadat, convert(VARCHAR, temp.syscreadat, 104) AS syscreadat_vier, temp.Jahr, temp.Woche, temp.Wochentag, temp.Anzahl_syscreadat, cast(Anzahl_syscreadat AS DECIMAL(18, 2)) / (SELECT count(*)FROM dbo.sv_pwa_tasks01) AS Trend_ueberfaellig FROM temp;
Grüße Volker -
Hallo Volker,
vielen Dank für die Mühe. Hab es getestet aber leider bringt diese Abfrage nicht das Ergebnis, welches ich mir erhofft habe. Wahrscheinlich habe ich mein Problem schlecht beschrieben.
An die bestehende Tabelle sollen zwei Spalten angefügt werden.Erste neue Spalte: Trend_Anzahl_syscreadat
Zweite neue Spalte: Trend_ueberfaelligFür die Spalte Trend_Anzahl_syscreadat soll gelten (ich mach das mal am Beispiel der dritten Zeile) : (Wert von Anzahl_syscreadat aus Zeile 1 plus Wert von Anzahl_syscreadat aus Zeile 2 plus Wert von Anzahl_syscreadat aus Zeile 3) geteilt durch 3 (weil wir uns in der dritten Zeile befinden)
Somit würden hier folgende Werte entstehen:Trend_Anzahl_syscreadat
831 (831 / 1)
831 ((831+831) / 2)
831 ((831+831+831) / 3)
834,75 ((831+831+831+846) / 4)
838,8 ((831+831+831+846+855) / 5)
842,5 ((831+831+831+846+855+861) / 6)
usw.Für die neue Spalte Trend_ueberfaellig soll das Ganze analog (in Beziehung zur Spalte ueberfaellig) entstehen:
Trend_ueberfaellig
462 (462 / 1)
466,5 ((462+471) / 2)
471,67 ((462+471+482) / 3)
467 ((462+471+482+453) / 4)
usw.Hoffentlich habe ich jetzt fehlerfrei erklärt!
Vielen Dank für die Hilfe!Grüße Olaf
-
Gelöst.
Das Zauberwort heißt gleitender Durchschnitt.
https://docs.microsoft.com/de-de/sql/t-sql/functions/avg-transact-sql?view=sql-server-2017#e-using-the-over-clause