sql >> Database >  >> RDS >> PostgreSQL

Een doorlopend totaal voor een voortschrijdende periode maken

Het kennen van het lopende totaal van bezoeken of gebruikers of activiteiten gedurende een voortschrijdende periode is een goede manier om de prestaties van uw website of app te analyseren. De zoekterm '12 maanden voortschrijdend rapport' heeft meer dan 12 miljoen zoekresultaten, en experts zijn van mening dat het voortschrijdende rapport een van de beste manieren is om trends weer te geven. Het is net zo verhelderend om uw tijdsperiode te vervangen door een jaaroverzicht of een weergave van 12 maanden, afhankelijk van uw gebruiksscenario.

Als u bijvoorbeeld de dagelijkse trends van websitebezoekers over een periode van zes maanden analyseert, kan dit waardevolle informatie opleveren, maar geen trends over kortere perioden binnen het bereik van de grafiek. Het toont alleen de algemene trend.

Als u inzichten wilt krijgen om perioden van groei of daling te identificeren, kan een voortschrijdende trendanalyse u helpen deze perioden te identificeren. De onderstaande grafiek toont dezelfde gegevens als hierboven, gerangschikt op een dagelijks interval, in een voortschrijdend trendformaat van 7 dagen.

Met deze Rolling View van 7 dagen kunt u meer zien dan alleen de algemene trend in de dagelijkse totale lijngrafiek. Hier kunt u microtrends binnen de algehele ervaring zien die veel meer inzichtelijke informatie voor uw organisatie kunnen onthullen. In ons voorbeeld hier kunnen we zien dat de algemene trend van bezoekers per dag omhoog is in onze eerste grafiek, maar onze tweede toont opeenvolgende 7 perioden binnen onze algemene trend die een neerwaartse richting hebben. Dit soort inzicht kan ons helpen perioden van neerwaartse trend te identificeren die kunnen samenvallen met marketinginspanningen die wel of niet hebben gewerkt.

De Query

Om deze query te maken, willen we een paar dingen weten:

  1. De voortschrijdende periode. Voorbeeld 12 maanden, 30 dagen of 7 dagen. In ons geval:7 dagen.
  2. De statistiek die we analyseren:bezoekers per dag.

De query bestaat uit verschillende subquery's. Gebruik eerst Genereer_serie om rijen in een tabel toe te wijzen voor alle datums in een periode van het begin tot het einde van de periode in de kolom bezoekers.created_date, die wordt aangeroepen in de hoofdopdracht SELECT. Deze subquery zal dienen als de tabel waaruit we zullen selecteren.

Een tweede subquery gaat naar het hoofdgedeelte en retourneert het aantal unieke bezoekers die onze site in een periode van 7 dagen hebben bezocht. Deze subquery dient als een eigen kolom in de hoofdquery en telt de afzonderlijke bezoekers van de "dag" tot 7 dagen voorafgaand aan de "dag".

Alles bij elkaar kunnen we een voortschrijdende trend van onze bezoeker per dag genereren in een periode van 7 dagen:

    SELECT
        day,
        (
          SELECT
              COUNT(DISTINCT "Visitors"."visitor_id") AS "Visitors"
          FROM
              "public"."visitors" AS "Visitors"
          WHERE  
              "Visitors"."created_date" BETWEEN b.day - 7 AND b.day + 1
        )
    FROM  (SELECT
            generate_series(
                            MIN(DATE_TRUNC('day', "Visitors"."created_date")::DATE),
                            MAX(DATE_TRUNC('day', "Visitors"."created_date")::DATE),
                            '1d')::date as day
            FROM "public"."visitors" AS "Visitors"
          ) as b
    GROUP BY day                        
    ORDER BY day

De wiskunde testen. We kunnen de wiskunde hier in de volgende tabel testen. Bekijk de vertragingsstappen die de voorgaande 7 dagen toewijzen aan de kolom Tellen, en de totale kolom die gelijk is aan de kolom Bezoekers.

Nu onze wiskunde is bevestigd, kunnen we erop vertrouwen dat deze functie ons een algemeen overzicht geeft van de lopende totalen van voortschrijdende perioden. De bovenstaande zoekopdracht kan worden aangepast om verschillende tijdsperioden weer te geven, afhankelijk van uw gebruik.


  1. Retourneren van resultaat, zelfs voor elementen in de IN-lijst die niet in de tabel voorkomen

  2. Hoe wordt de JDBC-querytime-out van Oracle geïmplementeerd?

  3. PL/SQL-opgeslagen procedures maken met parameters in Oracle Database?

  4. Hoe de sortering van een kolom in MySQL te tonen