sql >> Databáze >  >> RDS >> Mysql

Zobrazit všechna data mezi, i když žádný výsledek

Můžete sestavit automatizovanou sadu výsledků pomocí proměnných MySQL pro všechna data, která chcete.

select
      AllDaysYouWant.MyJoinDate,
      count( U.User_ID ) as NumberJoined
   from
      ( select
              @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
           from
              ( select @curDate := '2012-11-21' ) sqlvars,
              Users
           limit 18 ) AllDaysYouWant
      LEFT JOIN Users U
         on AllDaysYouWant.MyJoinDate = U.User_JoinDate
   group by
      AllDaysYouWant.MyJoinDate

Vnitřní dotaz, právě se připojuji k tabulce uživatelů bez klíče, takže se používá pouze k procházení X počtem záznamů, které představují požadované denní rozpětí... Může to být 30, 100, cokoliv.... Prostě pokud je tabulka (v tomto případě uživatelé), má tolik záznamů, kolik očekáváte.

POTOM se tento výsledek pouze dnů připojí k tabulce uživatelů, ale tentokrát na základě JOIN_DATE uživatele. Jednoduché COUNT() by vám mělo přinést to, co chcete.

„AllDaysYouWant“ je alias přiřazený k internímu dotazu první části

  ( select
          @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
       from
          ( select @curDate := '2012-11-21' ) sqlvars,
          Users
       limit 18 ) AllDaysYouWant

To v podstatě říká... Z tabulky uživatelů (ale může to být jakákoliv) mi dejte 18 řádků dat (přes limit, ale může to být téměř libovolný počet záznamů, ale potřebujete pouze od 22. listopadu do 6. prosince, což je pouze 14 dní, ale udělal jsem 18, jen z principu to mohlo být téměř cokoliv. Nad tabulkou Users je (select @curDate :='2012-11-21' ) sqlvars. Jakýkoli příkaz select v dotazu, který je zabalen do závorek jako zdroj tabulky musí mít alias a protože je to jen proměnná, kterou budu používat, je mi jedno, jak se jmenuje. Tento dotaz tedy začíná proměnnou 21. listopadu a Select @curDate :=Date_Add... bla bla uvádí, že převezme aktuální hodnotu @curDate, přidá k ní 1 den (nyní se stane 22. listopadu) a uloží ji do vráceného řádku „MyJoinDate“. Takže nyní tento vnitřní dotaz vytvoří vaši tabulku pouze dat od 22. listopadu vpřed data za 18 dní a má alias „AllDaysYouWant“ pro zbytek dotazu, na který se má odkazovat.

Upravil jsem dotaz, na který jste pravděpodobně narazili, na alias.field vše pro upřesnění...



  1. Mysql AVG ignoruje nulu

  2. Export a import výpisu tabulky (.sql) pomocí pgAdmin

  3. MySQL - Použití COUNT(*) v klauzuli WHERE

  4. NOW() Příklady – MySQL