Подсчет данных, попадающих в определенный месяц в MySQL - PullRequest
1 голос
/ 07 мая 2019

Привет, у меня проблемы с сортировкой данных изображений по месяцам, я бы хотел сказать, сколько изображений было создано, обновлено и удалено за определенный месяц, получив подсчет и группировку по месяцам.У меня есть две таблицы с данными изображения. В обеих таблицах есть столбцы «createAt», «updatedAt» и «deleteAt», поэтому я сделал форматирование даты в столбцах обеих таблиц и объединил их, чтобы все данные были вместе, но явозникли проблемы с подсчетом данных.Вот что у меня есть:

SELECT DATE_FORMAT(`createdAt`, "%M %Y"), DATE_FORMAT(`updatedAt`, "%M %Y"), DATE_FORMAT(`deletedAt`, "%M %Y") FROM harvest_sample_images UNION SELECT DATE_FORMAT(`createdAt`, "%M %Y"), DATE_FORMAT(`updatedAt`, "%M %Y"), DATE_FORMAT(`deletedAt`, "%M %Y") FROM plant_sample_images

Любая помощь будет признательна.

SELECT DATE_FORMAT(`createdAt`, "%M %Y") DAT, count(*) AS `created`,
(SELECT DATE_FORMAT(`updatedAt`, "%M %Y") DAT, COUNT(*)) AS `updated`,
(SELECT DATE_FORMAT(`deletedAt`, "%M %Y") DAT COUNT(*)) AS `deleted`
FROM (SELECT `createdAt`, `updatedAt`, `deletedAt` FROM harvest_sample_images UNION SELECT `createdAt`, `updatedAt`, `deletedAt` FROM plant_sample_images)
GROUP BY DATE_FORMAT(`created`, "M% %Y")

Я попробовал это сейчас.


Так что я мог бынашел другой способ сортировки информации об изображениях по каждому соответствующему месяцу с подсчетом, а также отображения месяца, в который он попадает.

SELECT DATE_FORMAT(`timestamp_date`, "%M %Y") AS `Month`,
(SELECT COUNT(*) FROM (SELECT `createdAt` FROM harvest_sample_images UNION ALL SELECT `createdAt` FROM plant_sample_images) AS `images_created` WHERE DATE_FORMAT(images_created.`createdAt`, "%m %y") = DATE_FORMAT(`timestamp_date`, "%m %y")) AS `Created`,
(SELECT COUNT(*) FROM (SELECT `updatedAt` FROM harvest_sample_images UNION ALL SELECT `updatedAt` FROM plant_sample_images) AS `images_updated` WHERE DATE_FORMAT(images_updated.`updatedAt`, "%m %y") = DATE_FORMAT(`timestamp_date`, "%m %y")) AS `Updated`,
(SELECT COUNT(*) FROM (SELECT `deletedAt` FROM harvest_sample_images UNION ALL SELECT `deletedAt` FROM plant_sample_images) As `images_deleted` WHERE DATE_FORMAT(images_deleted.`deletedAt`, "%m %y") = DATE_FORMAT(`timestamp_date`, "%m %y")) AS `Deleted`
FROM table_dates

Итак, я сейчас создал другую таблицу ссписок дат от начала данных до настоящего времени.Затем я перебираю данные и проверяю, совпадает ли отформатированная дата table_dates с отформатированной датой объединения даты в двух таблицах изображений.Я могу получить счет и добавить его в качестве столбца в новой таблице.Мысли ценятся

1 Ответ

1 голос
/ 07 мая 2019

Вам нужно сосчитать и сгруппировать по

select  year(createdAt) year , month(createdAt) month, count(*)
from  my_table  
group by   year(createdAt), month(createdAt) 

или

SELECT DATE_FORMAT(`createdAt`, "%M %Y")  DAT, count(*)
from  my_table  
group by   DATE_FORMAT(`createdAt`, "%M %Y")

для 3-х отсчетов, которые вы можете использовать join

select t1.year_month, t1.count_create, t2.count_update, t3count_delete
from (
  SELECT DATE_FORMAT(`createdAt`, "%M %Y") year_month , count(*) count_create 
  from  my_table  
  group by   DATE_FORMAT(`createdAt`, "%M %Y")
) t1 
left join (
  SELECT DATE_FORMAT(`updatedAt`, "%M %Y") year_month , count(*) count_update 
  from  my_table  
  group by   DATE_FORMAT(`updatedAt`, "%M %Y")

) t2 ON t1.year_month = t2.year_month
left join (
  SELECT DATE_FORMAT(`deletedAt`, "%M %Y") year_month , count(*) count_delete 
  from  my_table  
  group by   DATE_FORMAT(`deletedAt`, "%M %Y")

) t3 ON t1.year_month = t3.year_month 
...