none
Trend ermitteln RRS feed

  • 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
    Donnerstag, 7. März 2019 14:51

Antworten

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


    Donnerstag, 7. März 2019 15:02
    Moderator
  • 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
    Freitag, 8. März 2019 06:58
  • 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

    Freitag, 8. März 2019 10:35
  • 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_ueberfaellig

    Fü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

    Freitag, 8. März 2019 14:26
    • Bearbeitet Olaf113 Montag, 11. März 2019 08:10
    • Als Antwort markiert Olaf113 Montag, 11. März 2019 08:11
    Montag, 11. März 2019 08:09