如何将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表数据汇总半年?的主要内容,如果未能解决你的问题,请参考以下文章