按周查询

SELECT a.click_week,IFNULL(b.count,0) AS count
FROM (SELECT WEEK(CURRENT_DATE,1) as click_week
		UNION ALL
		SELECT WEEK(DATE_SUB(CURRENT_DATE,INTERVAL 1 WEEK),1) as click_week
		UNION ALL
		SELECT WEEK(DATE_SUB(CURRENT_DATE,INTERVAL 2 WEEK),1) as click_week
		UNION ALL
		SELECT WEEK(DATE_SUB(CURRENT_DATE,INTERVAL 3 WEEK),1) as click_week
		UNION ALL
		SELECT WEEK(DATE_SUB(CURRENT_DATE,INTERVAL 4 WEEK),1) as click_week
		UNION ALL
		SELECT WEEK(DATE_SUB(CURRENT_DATE,INTERVAL 5 WEEK),1) as click_week
		UNION ALL
		SELECT WEEK(DATE_SUB(CURRENT_DATE,INTERVAL 6 WEEK),1) as click_week
) a left join(
		SELECT WEEK(push_date,1) as datetime,count(*) as count
		FROM `warnings`
		GROUP BY WEEK(push_date,1)
)b on a.click_week = b.datetime;

但是这种只适用于数据的日期都在同一年,如果是不同年份的9月1号,那么也会被统计,被认为属于同一周次,从而产生错误。
以下为正确写法:

SELECT a.click_week,IFNULL(b.count,0) AS count
FROM (SELECT DATE_FORMAT(CURRENT_DATE,'%Y-%U') as click_week
		UNION ALL
		SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE,INTERVAL 1 WEEK),'%Y-%U') as click_week
		UNION ALL
		SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE,INTERVAL 2 WEEK),'%Y-%U') as click_week
		UNION ALL
		SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE,INTERVAL 3 WEEK),'%Y-%U') as click_week
		UNION ALL
		SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE,INTERVAL 4 WEEK),'%Y-%U') as click_week
		UNION ALL
		SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE,INTERVAL 5 WEEK),'%Y-%U') as click_week
		UNION ALL
		SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE,INTERVAL 6 WEEK),'%Y-%U') as click_week
) a left join(
		SELECT DATE_FORMAT(push_date,'%Y-%U') as datetime,count(*) as count
		FROM `warnings`
		GROUP BY WEEK(push_date,1)
)b on a.click_week = b.datetime;

但是这样得到的’%Y-%U’中对应周数字段需要直行一次自增操作,要不然存在问题。

最新更新版本

参考链接

SELECT DATE_FORMAT(a.date,'%Y-%U') AS DATE,IFNULL(b.count,0) as count FROM
(
SELECT @cdate := DATE_ADD(@cdate,INTERVAL - 1 WEEK) `date`
FROM (SELECT @cdate :=DATE_ADD('2020-12-03', INTERVAL + 1 WEEK) FROM `warnings`) t1 
WHERE @cdate > '2020-09-01'
)a
LEFT JOIN
(
	SELECT DATE_FORMAT(w.push_date,'%Y-%U')as datetime,COUNT(*)as count FROM
	`warnings` w
	GROUP BY WEEK(w.push_date,1)
)b 
ON b.datetime= DATE_FORMAT(a.date,'%Y-%U')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值