我试图获得上周和前一周的总体 View 。我将它们分别称为 WeekMinusOne 和 WeekMinusTwo。
所以目前,我想要来自上周最后一个完整的 View ,即 12/23 - 12/29(我想从星期一开始我的一周)和来自本周减去 2 的 View ,即 12.16- 12.22。
虽然我知道我可以将其硬编码为确切的日期,但我希望它能够自动更新以反射(reflect)新数据。我怎样才能做到这一点?
我从中提取的表格的格式很简单。 只有两列,
date | # of unique views!
简化查看我的表格
想要的结果
最佳答案
首先,考虑以下表达式:
current_date - interval (weekday(current_date)) day
如果您的周从星期一开始,它会为您提供本周的第一天。如 this SO answer 中所述,如果您的一周从星期日开始,您需要:
current_date - interval (dayofweek(current_date) - 1) day
从这里开始,我们可以过滤前两周的表格并进行条件求和:
select
sum(
case when view_date >= w.dt - interval 7 day then views else 0 end
) views_from_week_minus_one,
sum(
case when view_date < w.dt - interval 7 day then views else 0 end
) views_from_week_minus_two
from
views_table v
inner join (select current_date - interval (weekday(current_date)) day dt) w
on v.view_date >= w.dt - interval 14 day and and view_date < w.dt
重要的是,由于它在日期列上不使用日期函数,因此该查询将受益于 views_table(view_date)
上的索引。半开区间策略的另一个优点是它可以正确处理日期的时间部分(如果有)。
关于MySQL:提取上周和前一周的总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59569369/