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

问题描述 投票:0回答:2

有人可以帮我写一个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
    )
mysql date datetime group-by
2个回答
2
投票

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

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')将日期或日期时间值截断到日历年的开头。


-1
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.