我的SQL查询出了什么问题? (没有得到期望的o / p)

时间:2012-12-10 12:54:44

标签: mysql sql

我希望我的查询返回当前日期和之前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天数据的替代方法

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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)

答案 2 :(得分: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)