有人可以帮我写一个 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/