Mysql 每周统计一次,考虑到截止日期已删除的
我需要一个计数每周,考虑到删除的一个特定的一周。例如 如果2013年12月29日-2014年01月04日被视为第1周,2014年01月05日-2014年01月11日被视为第2周,则输出应如下所示:Mysql 每周统计一次,考虑到截止日期已删除的,mysql,Mysql,我需要一个计数每周,考虑到删除的一个特定的一周。例如 如果2013年12月29日-2014年01月04日被视为第1周,2014年01月05日-2014年01月11日被视为第2周,则输出应如下所示: ID |Created_Date| Modified_date| Deleted(YN) 1 |01-01-2014 | NULL | 0 2 |01-03-2014 | NULL | 0 3 |01-04-2
ID |Created_Date| Modified_date| Deleted(YN)
1 |01-01-2014 | NULL | 0
2 |01-03-2014 | NULL | 0
3 |01-04-2014 |01-11-2014 | 1
4 |01-05-2014 |01-12-2014 | 1
5 |01-08-2014 |01-17-2014 | 1
6 |01-09-2014 | NULL | 0
7 |01-20-2014 | NULL | 0
|Date | count|
|12-29-2013 | 3
|01-04-2014 | 5 (this is because on 11th, there is a deleted record)
查询内容如下:
ID |Created_Date| Modified_date| Deleted(YN)
1 |01-01-2014 | NULL | 0
2 |01-03-2014 | NULL | 0
3 |01-04-2014 |01-11-2014 | 1
4 |01-05-2014 |01-12-2014 | 1
5 |01-08-2014 |01-17-2014 | 1
6 |01-09-2014 | NULL | 0
7 |01-20-2014 | NULL | 0
|Date | count|
|12-29-2013 | 3
|01-04-2014 | 5 (this is because on 11th, there is a deleted record)
问题是,它没有考虑前几周删除的数据,也没有给出总计数-已删除计数。请在备选方案上提供帮助。使用WEEK函数,您的查询将类似
select date_add(created_date, interval(1-DAYOFWEEK(created_date)) DAY)
created_date, count(*) from table1 where
(date_add(created_date, interval(7-DAYOFWEEK(created_date)) DAY) and deleted=0)
or (deleted = 1 and modified_date >
DATE_ADD(created_date, INTERVAL(7-DAYOFWEEK(created_date)) DAY))
group by week(created_date)
此外,如果您计划使用此查询获取一年以上的结果,则必须使用YEARWEEK而不是WEEK
查询未经测试,希望在没有修改的情况下可以正常工作
更新意见5:
SELECT WEEK(created_date) as W,
COUNT(*) as All,
SUM(deleted*SIGN(WEEK(Modified_date)-W)) as Deleted,
All - Deleted as Real
FROM table1
WHERE created_date>='2014-01-01'
GROUP BY W
ORDER BY W;
SQL fiddle在第一周,没有删除的记录。已删除的记录在第2周。2014年11月1日删除的记录3应仅将第2周的计数显示为已删除,而非第1周。应该考虑删除=1,修改后的日期应该大于当前周,计算删除的计数。由于该记录在第一周未被删除,因此应在第一周将其作为活动计数。感谢您的快速响应,请查看上面的评论以获取发布的查询。查询稍微修改如下:选择w1.w,w1.countall,w1.deleted,w1.countall-w1.deleted from选择WEEKcreated_date as w,计数为CountAll,SUMdeletedSIGNWEEKModified_date-WEEKcreated_date作为从表1中删除的日期,其中创建日期>='2014-01-01'按W顺序分组按W顺序w1。它甚至在deletes下的week1中给出了count 1,其中as week1没有删除。删除的修改日期在第2周。它应该在星期2中计算,而不是星期1数据。结果不应该考虑周一删除的记录3。同样,记录4和记录5计数在第2周删除。记录3计数应出现在第2周的删除中。记录4和5计数应出现在第3周删除中。取决于他们的修改日期。我认为,我们非常接近结果,而这个查询更接近。第一周给出了正确的结果,尝试删除/取消删除,但随后的几周没有给出正确的结果。在本例中,删除计数应仅显示1,但显示2。第3周,它没有显示任何计数,而应该显示2。