Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie Mysql, aby uzyskać liczbę miesięcy

Jeśli utworzone jest pole INT, należy użyć FROM_UNIXTIME funkcja konwertująca go na pole daty, a następnie MIESIĄC funkcja wyodrębniania miesiąca:

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

to zliczy wszystkie wiersze, które zostały utworzone w ciągu ostatnich 12 miesięcy. Zwróć uwagę, że prawdopodobnie lepiej jest również pogrupować według ROKU:

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))

Jeśli chcesz policzyć numery rejestracyjne zamiast wierszy, możesz użyć czegoś takiego jak

COUNT(registration_number)

aby pominąć wartości null, lub

COUNT(DISTINCT registration_number)

liczyć tylko różne.

Edytuj

Jeśli chcesz również pokazać miesiące, które mają count=0, użyłbym takiego zapytania, które zwraca wszystkie miesiące z bieżącego i poprzedniego roku:

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;

A potem użyłbym LEFT JOIN, który zwraca wszystkie wiersze pierwszego zapytania i tylko wiersze drugiego zapytania, które pasuje:

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

(proszę zauważyć, że tutaj rozważam tylko ostatnie 12 miesięcy, więc jeśli jesteśmy w połowie kwietnia 2013 r., zliczy wiersze w przedziale maj 2012 - 13 kwietnia, jeśli to nie jest prawidłowe zachowanie, daj mi znać)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dostosowanie do domyślnego ustawienia strefy czasowej w RDS

  2. Żagle nie mogą połączyć się z mySql

  3. Usuń zduplikowane rekordy z tabeli bez pk lub id lub unikalnych kolumn w mysql

  4. Jak wyłączyć tryb ścisły MySQL w Railsach?

  5. Nie można połączyć się z MySQL na Macu — brak pliku mysql.sock