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