作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个表,其中包含每天使用的数据量,它看起来像这样:
date | bytes
------------------
2014-01-1 | 12345
2014-01-2 | 56789
2014-01-3 | 78901
...
2014-02-1 | 12345
2014-02-2 | 56789
2014-02-3 | 78901
...
我需要做的是获取最近 6 个月的总计,但是该月必须从该月的 22 天开始,并在下个月的 21 天结束。当月应该从 22 日开始到今天结束。
我能想到的最好的结果是以下,问题是 - 它非常困惑,并且似乎没有给出正确的结果。
SELECT monthname(`date`),sum(`bytes`)
FROM `trafficDaily`
WHERE `date` between STR_TO_DATE( CONCAT( "22,", MONTH( NOW( ) )-6 , ",", YEAR( NOW( ) ) ) , "%d,%m,%Y" )
and STR_TO_DATE( CONCAT( "21,", MONTH( NOW( ) ) , ",", YEAR( NOW( ) ) ) , "%d,%m,%Y" )
group by month(DATE_SUB(`date`, INTERVAL 21 DAY))
order by `date`
预先感谢您的帮助。
最佳答案
您可以通过使用用户定义的变量来跟踪月份的变化,即在您的案例中,月份从 21 日开始
SELECT
MONTHNAME(STR_TO_DATE(group_day, '%m')) month_name ,
SUM(`bytes`) `sum`
FROM (
SELECT *,
@changemonth:= CASE
WHEN DAY(`date`) > 21
THEN @month
WHEN MONTH(`date`) <> @month
THEN @month
ELSE @month - 1
END group_day,
@month:= MONTH(`date`)
FROM
t ,(SELECT @changemonth:=0,
@month:= (SELECT MONTH(`date`) FROM t
WHERE `date` > NOW() - INTERVAL 6 MONTH ORDER BY `date` LIMIT 1) aa
) tt
WHERE `date` > NOW() - INTERVAL 6 MONTH
ORDER BY `date`
) a
GROUP BY group_day
根据评论进行编辑,适用于 1 月份位于过去 6 个月期间的情况
SELECT
MONTHNAME(
STR_TO_DATE(
CASE WHEN group_day < 1
THEN 12 ELSE group_day
END, '%m'
)
) month_name ,
SUM(`bytes`) `sum`
FROM (
SELECT *,
@changemonth:= CASE
WHEN DAY(`date`) > 21
THEN @month
WHEN MONTH(`date`) <> @month
THEN @month
ELSE @month - 1
END group_day,
@month:= MONTH(`date`)
FROM
t ,(SELECT @changemonth:=0,
@month:= (SELECT MONTH(`date`) FROM t
WHERE `date` > NOW() - INTERVAL 6 MONTH ORDER BY `date` LIMIT 1) aa
) tt
WHERE `date` > NOW() - INTERVAL 6 MONTH
ORDER BY `date`
) a
GROUP BY group_day
关于mysql - 如何在MySQL中选择6个月的数据,分组在下个月的22日和21日之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24104740/
我是一名优秀的程序员,十分优秀!