【问题标题】:Counting data falling within certain month in mySQL统计mySQL中某个月份内的数据
【发布时间】:2019-05-07 09:28:46
【问题描述】:

您好,我无法按月对图像数据进行排序,我希望能够通过获取计数并按月分组来了解在某个月内创建、更新和删除了多少张图像。我有两个包含图像数据的表。两个表都有“createdAt”、“updatedAt”和“deletedAt”列,所以我所做的是对两个表的列进行日期格式并将它们合并以将所有数据放在一起,但我无法获取数据的计数。这是我目前所拥有的:

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 的格式化日期是否等于两个图像表日期的并集的格式化日期。我得到计数​​并将其添加为新表中的列。 想法表示赞赏

【问题讨论】:

    标签: mysql heidisql


    【解决方案1】:

    你需要计数和分组

    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 
    

    【讨论】:

    • 三列都可以使用吗?我需要它是一个视图
    • 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(createdAt, "M% %Y")
    • 信息不只是来自一个表,而是来自两个
    • @Miaan SO 不是编码服务.. 我认为 mi answer 为您提供了很多有关构建结果方式的信息.. 您需要.. 根据我的回答,您可以或使用第二个表的联合并为联合行获取一个选择,或者为与第二个表相关的 3 列添加 3 个其他左连接 ..
    • a select .. 是查询的一部分,它设置要由查询检索的列 .. join 是定义表之间关系的查询的一部分 ...codeproject.com/Articles/33052/…
    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多