sql >> Databáze >  >> RDS >> PostgreSQL

Dotazování DAU/MAU v průběhu času (denně)

Za předpokladu, že máte hodnoty pro každý den, můžete získat celkové počty pomocí dílčího dotazu a range between :

with dau as (
      select date, count(userid) as dau
      from dailysessions ds
      group by date
     )
select date, dau,
       sum(dau) over (order by date rows between -29 preceding and current row) as mau
from dau;

Bohužel si myslím, že chcete spíše odlišné uživatele než jen počty uživatelů. Tím je problém mnohem obtížnější, zejména proto, že Postgres nepodporuje count(distinct) jako funkce okna.

Myslím, že se k tomu musíte nějak připojit. Zde je jedna metoda:

with dau as (
      select date, count(distinct userid) as dau
      from dailysessions ds
      group by date
     )
select date, dau,
       (select count(distinct user_id)
        from dailysessions ds
        where ds.date between date - 29 * interval '1 day' and date
       ) as mau
from dau;


  1. Proč se velmi nedoporučuje mysql_escape_string?

  2. Problém s kompilací s MySQL C API na MAC OS X 10.6

  3. ORA-12705:Nelze získat přístup k datovým souborům NLS nebo neplatnému prostředí

  4. Jak vytvořit datum a čas z částí v Oracle/PLSQL?