sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man skapar en rullande period totalt

Att känna till den löpande summan av besök eller användare eller aktiviteter under en rullande tidsperiod är ett bra sätt att analysera din webbplats eller app resultat. Söktermen "12-månaders rullande rapport" har över 12 miljoner sökresultat, och experter tror att den rullande rapporten är ett av de bästa sätten att visa trender. Att ersätta din tidsperiod med en årlig eller 12 månaders vy, beroende på ditt användningsfall, är lika insiktsfullt.

Till exempel kan en analys av dagliga webbplatsbesökartrender under en sexmånadersperiod visa värdefull information, men den visar inte trender över mindre tidsperioder inom diagrammets räckvidd. Den visar bara den övergripande trenden.

Om du vill få insikter för att identifiera perioder av tillväxt eller nedgång kan en rullande trendanalys hjälpa dig att identifiera dessa perioder. Diagrammet nedan visar samma data som ovan, uppställda på ett dagligt intervall, i ett rullande 7-dagars trendformat.

Med denna rullande vy över 7 dagars period kan du se mer än bara den övergripande trenden i det dagliga totala linjediagrammet. Här kan du se mikrotrender inom helhetsupplevelsen som kan avslöja mycket mer insiktsfull information för din organisation. I vårt exempel här kan vi se den övergripande trenden för besökare per dag är upp i vårt första diagram, men vårt andra visar på varandra följande 7 perioder inom vår övergripande trend som har en nedåtgående riktning. Den här typen av insikt kan hjälpa oss att identifiera perioder av nedåtgående trend som kan sammanfalla med marknadsföringsinsatser som antingen fungerade eller inte.

Frågan

För att skapa den här frågan vill vi veta några saker:

  1. Den rullande perioden. Exempel 12 månader, 30 dagar eller 7 dagar. I vårt fall:7 dagar.
  2. Mätet vi analyserar:besökare per dag.

Frågan kommer att bestå av olika delfrågor. Använd först generera_serier för att tilldela rader i en tabell för alla datum i ett datumintervall från början till slutet av datumintervallet i kolumnen visitors.created_date, som kommer att anropas i SELECT-huvudsatsen. Den här underfrågan kommer att fungera som tabellen vi väljer från.

En andra underfråga kommer att gå i huvudsektionen och returnera räkningen av alla unika besökare som besökte vår webbplats under en 7-dagarsperiod. Den här underfrågan kommer att fungera som en egen kolumn i huvudfrågan och kommer att räkna de distinkta besökarna från "dagen" till 7 dagar före "dagen".

Genom att sammanställa allt kan vi generera en rullande trend av vår besökare per dag under en 7-dagarsperiod:

    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

Testar matematiken. Vi kan testa matematiken här i följande tabell. Se eftersläpningsstegen som tilldelar de föregående 7 dagarna till kolumnen Antal, och den totala kolumnen som motsvarar kolumnen Besökare.

Med vår matematik bekräftad kan vi lita på att den här funktionen ger oss en övergripande bild av löpande summor av rullande perioder. Ovanstående fråga kan justeras för att visa olika tidsperioder beroende på ditt användningsfall.


  1. Är SELECT-frågor den enda typen som kan kapslas?

  2. Räknar rader för alla tabeller samtidigt

  3. Hur man ändrar språk när man formaterar nummer i PostgreSQL

  4. skalär underfråga i if-satsen Condition i PL/SQL