【问题标题】:MySQL: Extracting totals from last week and the week before last [closed]MySQL:从上周和前一周提取总数[关闭]
【发布时间】:2020-04-21 11:23:10
【问题描述】:

我正在尝试获取前一周和前一周的总视图。我将它们分别称为 WeekMinusOne 和 WeekMinusTwo。

所以目前,我想要上一周的浏览量,即 12/23 - 12/29(我想从星期一开始我的一周)和 WeekMinus 2 的浏览量,即 12.16- 12.22.

虽然我知道我可以将其硬编码到确切的日期,但我希望它能够自动更新以反映新数据。我该怎么做?

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

date | # of unique views!

简单地看我的桌子

想要的结果

【问题讨论】:

  • MySQL SQL Server。你实际在用什么?
  • 对不起,我有点困惑:(我是 sql 新手,我正在使用 mysql
  • CREATE TABLE 和样本数据INSERT INTO 添加到您的问题中,并显示此数据的确定结果。并指定 MySLQL 版本。
  • 请提供样本数据和期望的结果。
  • 已编辑 - 请查看

标签: mysql sql date group-by sum


【解决方案1】:

首先,考虑以下表达式:

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) 上的索引。半开区间策略的另一个优点是它可以正确处理日期的时间部分(如果有)。

【讨论】:

    【解决方案2】:

    尝试下一个解决方案:

    SELECT SUM(views) as total_views, WEEK(date, 1) AS week_num 
    FROM your_table
    WHERE WEEK(CURDATE(), 1) - WEEK(date, 1) < 2
    GROUP BY week_num;
    

    查询将返回按周数分组的夏季视图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      相关资源
      最近更新 更多