代码之家  ›  专栏  ›  技术社区  ›  The Icon

获取本周的记录数

  •  0
  • The Icon  · 技术社区  · 2 年前

    我正在尝试为图表构建一个端点,以获取在当前一周、当前一个月或自定义时间段访问某个站点的用户数。 对于本周的数据,我有一个如下的查询

    SELECT DAYOFWEEK(last_accessed) as week_day, COUNT(*) as active_users
    FROM users WHERE WEEKOFYEAR(last_accessed) = WEEKOFYEAR(now()) AND
    YEAR(last_accessed) = YEAR(now())
    GROUP BY week_day
    ORDER BY week_day
    
    

    问题是,分组不包括计数为0的天数,即没有用户访问站点的天数。如果我想包括这个,我该怎么做? ,如何正确构造此查询以实现此目的。

    0 回复  |  直到 2 年前
        1
  •  0
  •   Nathan_Sav    2 年前

    这就是我如何应对的 SQL Server ,因此需要一些工作,但这只是一个开始。

    with cteBase as
    (
        select n from (values(0),(0)) as t(n)
    )
    select top 7 dates_table.day_all_week,count(u.user_id) as USERS_COUNT
    from
    (
        select dateadd(day, ROW_NUMBER() over (order by c.n)-1,
             cast(DATEADD(DD, 1 - DATEPART(DW, GETDATE()), GETDATE()) as date)) as day_all_week
        from ctebase as c,ctebase as c2,cteBase as c3
    ) as dates_table
    left join #users as u on dates_table.day_all_week=u.last_accessed
    group by dates_table.day_all_week
    order by dates_table.day_all_week
    

    Top 7有点粗糙,你可以使用where来选择所需的日期,目前设置为从一周的第一天开始 (cast(DATEADD(DD, 1 - DATEPART(DW, GETDATE()), GETDATE()) as date)) .这可以改成固定的日期。

    你可以简化工作日的日期。保留理货表意味着你可以很容易地扩展到月/年等。

    select dateadd(DD,n,(cast(DATEADD(DD, 1 - DATEPART(DW, GETDATE()), GETDATE()) as date)))
    from (values(0),(1),(2),(3),(4),(5),(6)) as t(n)