mysql - MySQL表数据如何按半年聚合?

标签 mysql date datetime group-by

有人可以帮我写一个 MySQL 查询来根据半年划分数据吗?有日期格式列的记录?

我按每月和每季度为 GROUP 编写了查询,但半年没有发生。

我对每周、每月和每季度使用了以下查询:

CREATE view darren_inventory_mrp_forecast_summary as
    ( SELECT row_number() OVER(ORDER BY sub.product_id) as id,
             SUM(sub.quantity)/12 as quantity,
             SUM(sub2.quantity)/4 as quarterly,
             SUM(sub3.quantity)/51 as weekly,
             sub.product_id as product_id FROM
          (SELECT row_number() OVER(ORDER BY product_id) as id,
                  product_id as product_id,
                  SUM(product_qty) as quantity
          FROM stock_move
          WHERE consumed_for IS NOT NULL
          GROUP BY to_char(DATE(create_date), 'YYYY-MM'), product_id 
          ) 
      as sub 
      LEFT JOIN 
          (SELECT row_number() OVER(ORDER BY product_id) as id,
                  product_id as product_id,
                  SUM(product_qty) as quantity
          FROM stock_move
          WHERE consumed_for IS NOT NULL
          GROUP BY to_char(DATE(create_date), 'YYYY-Q'), product_id 
          ) 
      as sub2 on (sub2.product_id=sub.product_id)  
      LEFT JOIN
          (SELECT row_number() OVER(ORDER BY product_id) as id,
                  product_id as product_id,
                  SUM(product_qty) as quantity
          FROM stock_move
          WHERE consumed_for IS NOT NULL
          GROUP BY to_char(DATE(create_date), 'YYYY-WW'), product_id 
          ) 
      as sub3 on (sub3.product_id=sub.product_id)  
      GROUP BY sub.product_id
    )

最佳答案

您可以使用此获取日期项出现的月份的第一天。

select last_day(datecolumn) + interval 1 day - interval 1 month 

你可以用这个获取日期项目的月份

select month(datecolumn)

你可以像这样得到半年的月数(0-5)

select (month(datecolumn) -1) mod 6

所以,你可以这样得到半年的第一天。

select last_day(datecolumn) + interval 1 day - interval 1 month
        - interval (month(datecolumn) -1) mod 6 month

然后您可以 GROUP BY 这个大表达式并以这种方式汇总您的数据。

这也有效:

select last_day(datecolumn) + interval 1 day - interval 1 month
      - interval (quarter(datecolumn) -1) mod 2 quarter

诀窍是想出一个表达式,将任何日期时间表达式截断到它所在的半年的第一天。

如果你只想处理特定年份的东西,做这样的事情。

  WHERE datecolumn >= DATE_FORMAT(NOW(), '%y-01-01') - INTERVAL 1 YEAR
    AND datecolumn >  DATE_FORMAT(NOW(), '%y-01-01') + INTERVAL 1 YEAR

此特定示例选择日历年 2015 和 2016 中的所有内容。表达式 DATE_FORMAT(someTimestampValue, '%y-01-01') 将日期或日期时间值截断到日历的开头年。

关于mysql - MySQL表数据如何按半年聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39798591/

相关文章:

r - 平均相对于时间的值

ruby-on-rails - 如何在 RailsAdmin 中设置日期时间值的时区

json - Spring Boot LocalDate 字段序列化和反序列化

r - 如何在R中选择具有特定日期的每隔一行

mysql - 设计 mysql 表的最佳方法是什么?我需要用偏好图来代表用户

mysql - OS X、Elixir、Ecto、Crypto、MySQL

mysql - 来自 Mysql SELECT 查询的日期格式

datetime - 一个更好的 VB6 CDate

php - CakePHP 递归实现漂亮的路由 - 类别、主题、部分、小节等

PHP 和 MySQL 时区,同时支持用户定义的时区