MySQL:提取上周和前一周的总计

标签 mysql sql date group-by sum

我试图获得上周和前一周的总体 View 。我将它们分别称为 WeekMinusOne 和 WeekMinusTwo。

所以目前,我想要来自上周最后一个完整的 View ,即 12/23 - 12/29(我想从星期一开始我的一周)和来自本周减去 2 的 View ,即 12.16- 12.22。

虽然我知道我可以将其硬编码为确切的日期,但我希望它能够自动更新以反射(reflect)新数据。我怎样才能做到这一点?

我从中提取的表格的格式很简单。 只有两列,

date | # of unique views!

简化查看我的表格

simplified look at my table

想要的结果

desired result

最佳答案

首先,考虑以下表达式:

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/

相关文章:

python - 删除 Pandas Dataframe 中的重复日期并合并值 - Python

Python - 在字符串中查找日期

mysql - 如何根据具有特定值的字段逐行递增 id

SQL Server : arbitrary auto-increment of primary key

php - 表 UI View : Mysql - Php

mysql - 如何将列名组合到 MySQL "LIKE"子句中

mysql - 连接和分组 SQL 结果

javascript - java或javascript中具有t格式转换的日期时间dd mmm yyyy hh mm ss

MYSQL 将 1 个字段设置为等于另一个字段 - 但添加文本

mysql 5.5 怎么设置成utf8?