0

我希望我的查询返回当前日期和前 7 天之间特定日期注册的用户数。不是天,而是日期时间格式,它以整数格式显示。例如,对于日期 20/12/2012,其显示为 0,21/12/2012 显示为 1,依此类推

我的查询:

select date(update_timestamp) between date_sub(sysdate(), interval 7 day) and sysdate()  as date, count(*) users 
from registered 
group by date(update_timestamp)

期望的输出

DATE       | USERS
20/12/2012 | 5
21/12/2012 | 6

我得到的输出

DATE  | USERS
    0 | 5
    1 | 6

我的 sql 查询有什么问题?另外,我需要知道获取最近 7 天数据的替代方法

4

3 回答 3

2

我想你想要一个WHERE子句:

select date(update_timestamp) Date, count(*) users 
from registered 
where date(update_timestamp) between date_sub(sysdate(), interval 7 day) and sysdate()
group by date(update_timestamp)
于 2012-12-10T12:57:41.550 回答
2

您已将条件放入select语句中,因此它将被评估并返回,而不是限制结果。将条件放入where语句中:

select date(update_timestamp) as date, count(*) users
from registered
where date(update_timestamp) between date_sub(sysdate(), interval 7 day) and sysdate()
group by date(update_timestamp)

即使没有用户,要获取区间内的所有日期,您需要加入另一个数据源:

select date_sub(sysdate(), interval d.offset day) date, count(r.update_timestamp) users
from registered r
inner join (
  select 0 as offset union all
  select 1 union all
  select 2 union all
  select 3 union all
  select 4 union all
  select 5 union all
  select 6 union all
  select 7
) d on date(r.update_timestamp) = date_sub(sysdate(), interval d.offset day)
group by date_sub(sysdate(), interval d.offset day)
于 2012-12-10T12:58:17.010 回答
1

试试这个查询::

where 子句是过滤部分,对于日期类型逻辑,您应该在查询的该部分使用当前日期 - 7 天逻辑。

select date(update_timestamp) ,count(*) users 
from registered 
where date(update_timestamp) 
between 
date_sub(sysdate(), interval 7 day) and sysdate()  
group by date(update_timestamp)
于 2012-12-10T12:59:34.253 回答