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

Как можете да покажете нула подред, като използвате динамика за година и месец в интервал?

Хубав пъзел :)

Можете да генерирате таблица, която ще съдържа година и месец, необходими за 12-месечния интервал и след това да направите външно присъединяване към нея:

SET @var_year ='2013'SET @var_month ='12'SELECT @row :=@row + (случай, когато вдясно(@row,2) ="12" след това 89 else 1 край) като година месец ОТ (изберете 0 съюз всички изберете 1 съюз всички изберете 3 съюз всички изберете 4 съюз всички изберете 5 съюз всички изберете 6 съюз всички изберете 6 съюз всички изберете 7 съюз всички изберете 8 union all select 9 union all select 10 union all select 11) t ,(SELECT @row:=CONCAT(@var_year,right(concat('0',(@var_month-1)),2))) r 

Ще даде :

<предварителен код>| ГодинаМесец ||-----------|| 201312 || 201401 || 201402 || 201403 || 201404 || 201405 || 201406 || 201407 || 201408 || 201409 || 201410 || 201411 |

Така че опитайте това (пример с 2014 като година и 1 като месец) :

SQL Fiddle

Настройка на схемата на MySQL 5.5 :

СЪЗДАВАЙТЕ ТАБЛИЦА творения(`id` int, `created_at` date );ВМЕСЕТЕ В творения (`id`, `created_at`)СТОИ (1, '2013-12-11'), (2, ' 2014-01-11'), (3, '2014-01-21'), (4, '2014-01-12'), (5, '2014-02-22'), (6, '2014- 02-13'), (7, '2014-03-12'), (8, '2014-04-23'), (9, '2014-05-23'), (10,'2014-06- 23'), (11,'2014-08-23'), (12,'2014-08-23'), (13,'2014-09-23'), (14,'2014-10-23' ), (15,'2014-11-23'), (16,'2014-12-23'); 

**Запитване **:

SET @var_year ='2014'SET @var_month ='1'SELECT count(created_at) AS count_all, left(YearMonth,4) като действителна_година, отдясно (YearMonth,2) като действителен_месец ОТ (ИЗБЕРЕТЕ @ред :=@row + (случай, когато вдясно(@row,2) ="12" след това 89 else 1 край) като година месец ОТ (изберете 0 съюз всички изберете 1 съюз всички изберете 3 съюза всички изберете 4 съюза всички изберете 5 съюза всички изберете 6 съюз всички изберете 6 съюз всички изберете 7 съюз всички изберете 8 union all изберете 9 union all изберете 10 union all select 11) t,(SELECT @row:=CONCAT(@var_year,right(concat('0',(@var_month)) -1)),2))) r) като YearMonthTableLEFT OUTER JOIN творения ON CONCAT(year(created_at),right(concat('0',month(created_at)),2)) =YearMonthGROUP BY YearMonthORDER BY YearMonth ASC 

Резултати :

<предварителен код>| брой_всички | действителна_година | действителен_месец ||-----------|------------|--------------|| 3 | 2014 г. | 01 || 2 | 2014 г. | 02 || 1 | 2014 г. | 03 || 1 | 2014 г. | 04 || 1 | 2014 г. | 05 || 1 | 2014 г. | 06 || 0 | 2014 г. | 07 || 2 | 2014 г. | 08 || 1 | 2014 г. | 09 || 1 | 2014 г. | 10 || 1 | 2014 г. | 11 || 1 | 2014 г. | 12 |

РЕДАКТИРАНО:

Можете също така да създадете таблицата, вместо да я генерирате в подзаявка всеки път:

SQL Fiddle

Настройка на схемата на MySQL 5.5 :

СЪЗДАВАНЕ НА ТАБЛИЦА YearMonthTable(`tblYear` int, `tblMonth` int);INSERT INTO YearMonthTable (`tblYear`,`tblMonth`)СТОЙНОСТИ (2013,12), (2014,1), (2014,2 ), (2014,3), (2014,4), (2014,5), (2014,6), (2014,7), (2014,8), (2014,9), (2014,10), (2014,11), (2014,12), (2015,1), (2015,2), (2015,3), (2015,4), (2015,5); 

Запитване :

SET @var_year ='2014'SET @var_month ='1'SET @from =STR_TO_DATE(CONCAT(@var_year, '/', @var_month, '/01'), '%Y/%m /%d')SET @to =DATE_ADD(DATE_ADD(@from, INTERVAL 12 MONTH), INTERVAL -1 DAY)SELECT count(created_at) AS count_all, tblYear като действителна_година, tblMonth като действителен_month FROM YearMonthTableLEFT OUTER year JOIN(създадени творения на OUTER year(created_at) ) =tblYear AND month(created_at) =tblMonthWHERE STR_TO_DATE(CONCAT(tblYear, '/', tblMonth, '/01'), '%Y/%m/%d') МЕЖДУ @от И @до ГРУПА ПО tblMonth, tblMonth BY tblYear, tblMonth 

Резултати :

<предварителен код>| брой_всички | tblYear | tblMonth ||-----------|---------|----------|| 3 | 2014 г. | 1 || 2 | 2014 г. | 2 || 1 | 2014 г. | 3 || 1 | 2014 г. | 4 || 1 | 2014 г. | 5 || 1 | 2014 г. | 6 || 0 | 2014 г. | 7 || 2 | 2014 г. | 8 || 1 | 2014 г. | 9 || 1 | 2014 г. | 10 || 1 | 2014 г. | 11 || 1 | 2014 г. | 12 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Не може да се създаде изглед с променлива SET вътре

  2. Как да експортирате база данни на SQL Server в MySQL?

  3. Изчисляване на ранг в PHP/MySQL

  4. Ефективно дезинфекцирайте въведения от потребителя текст

  5. Групирайте множество mysql резултата по стойност на една колона