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

Mysql заявка за получаване на брой на месеци

Ако създаденото е INT поле, трябва да използвате FROM_UNIXTIME функция, за да го преобразувате в поле за дата, а след това МЕСЕЦ функция за извличане на месеца:

SELECT Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Month(FROM_UNIXTIME(created))

това ще преброи всички редове, които са били създадени през последните 12 месеца. Моля, обърнете внимание, че вероятно е по-добре да групирате и по ГОДИНА:

SELECT Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created))

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

COUNT(registration_number)

за да пропуснете нулеви стойности или

COUNT(DISTINCT registration_number)

да се броят само различни.

Редактиране

Ако трябва да покажете и месеци, които имат count=0, бих използвал заявка като тази, която връща всички месеци за текущата и за предходната година:

SELECT y, m
FROM
  (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
  (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
    UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
    UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months;

И тогава бих използвал LEFT JOIN, който връща всички редове на първата заявка и само редовете на втората заявка, която съвпада:

SELECT y, m, Count(yourtable.created)
FROM (
  SELECT y, m
  FROM
    (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
    (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
      UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
      UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
  LEFT JOIN yourtable
  ON ym.y = YEAR(FROM_UNIXTIME(yourtable.created))
     AND ym.m = MONTH(FROM_UNIXTIME(yourtable.created))
WHERE
  (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
  OR
  (y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
GROUP BY y, m

(моля, обърнете внимание, че тук разглеждам само последните 12 месеца, така че ако сме в средата на април 2013 г., той ще брои редовете в интервала май 2012 г. - 13 април, ако това не е правилното поведение, моля, уведомете ме)



  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:Максималният размер на колоната е 767 байта

  2. Как да покажа изображение от база данни с помощта на php

  3. Избирате ли всички колони, които започват с XXX, като използвате заместващ знак?

  4. Custom Query Pagination Cakephp

  5. Създайте Insert... Изберете оператор в Laravel