Mysql
 sql >> база данни >  >> RDS >> Mysql

Показване на всички дати между тях, дори и да няма резултат

Можете да създадете автоматизиран набор от резултати, използвайки MySQL променливи за всички дати, които искате.

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

Вътрешната заявка, аз просто се присъединявам към таблицата с потребители без ключ, така че просто се използва за циклично преминаване през X брой записи, за да представи периода на деня, който искате... Това може да бъде 30, 100, каквото и да е... Просто докато таблицата (в този случай потребители), има толкова записи, колкото очаквате.

ТОГАВА, този резултат от нищо освен дни се присъединява към таблицата с потребители, но този път въз основа на JOIN_DATE на потребителя. Простият COUNT() трябва да ви даде това, което искате.

„AllDaysYouWant“ е псевдонимът, присвоен на вътрешната заявка за първа част на

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

Това основно гласи... От таблицата с потребители (но може да е всякаква), дайте ми 18 реда данни (чрез ограничение, но може да има почти произволен брой записи, но ви трябва само от 22 ноември до 6 декември, което е само 14 дни, но направих 18 само за принцип, може да е почти всичко. Над таблицата Users е (select @curDate :='2012-11-21' ) sqlvars. Всеки оператор select в рамките на заявка, който е опакован в скоби като източникът на таблицата трябва да получи псевдоним и тъй като това е просто променлива, която ще използвам, не ме интересува какво е името й. Така че тази заявка стартира променливата на 21 ноември и Select @curDate :=Date_Add... бла бла състояния, за да вземе текущата стойност на @curDate, добавете 1 ден към него (сега става 22 ноември) и го съхранявате в върнатия ред „MyJoinDate“. Така че сега тази вътрешна заявка създава вашата таблица само с дати, започващи от 22 ноември препраща данни на стойност 18 дни и има псевдоним „AllDaysYouWant“ за останалата част от заявката за справка.

Коригирах заявката, която вероятно беше това, което срещнахте, към alias.field всичко за изясняване...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да предам нулева стойност на поле за външен ключ?

  2. Как да създадете MySQL база данни в cPanel

  3. Ruby datetime е подходящ за сравнение на mysql

  4. Формат на датата в MySQL ДД/ММ/ГГГГ избор на заявка?

  5. Къде трябва да съхранявам идентификационните данни на моята база данни?