如何将MySQL表数据汇总半年?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将MySQL表数据汇总半年?相关的知识,希望对你有一定的参考价值。

有人可以帮我写一个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中没有half_year函数,但您可以从季度计算: floor(quarter(date_column)/ 3)这一个返回0表示1,2个季度,1表示3,4个季度。

所以按半年分组:

GROUP BY year(date_column) + 0.1 * floor(quarter(date_column) / 3)

以上是关于如何将MySQL表数据汇总半年?的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL数据库错误代码提示汇总

如何在MYSQL查询中使用汇总函数联接表?

mysql删除上半年的数据

如何将数据放入事实表中?

MySql常用操作SQL语句汇总

MySQL必知应会-第12章-汇总数据