# Active Readers (Since N Days Ago)

**URL:** https://meta.discourse.org/t/active-readers-since-n-days-ago/275136
**Category:** Data & reporting
**Tags:** sql-query
**Created:** [May 1, 2016, 4:53am UTC](https://meta.discourse.org/t/active-readers-since-n-days-ago/275136 "2016-05-01T04:53:38Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![mcwumbly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mcwumbly/32/103861_2.png) [@mcwumbly](https://meta.discourse.org/u/mcwumbly)
#### Post date: [May 1, 2016, 4:53am UTC](https://meta.discourse.org/t/active-readers-since-n-days-ago/275136/1 "2016-05-01T04:53:38Z")

</div>

### Active Readers (Since N Days Ago)

Number of users who have read at least 1 post since N days ago

```sql
with intervals as (
    select
        n as start_time, 
        CURRENT_TIMESTAMP as end_time
    from generate_series(CURRENT_TIMESTAMP - INTERVAL '30 days',
                         CURRENT_TIMESTAMP - INTERVAL '1 day',
                         INTERVAL '1 days') n
),
latest_visits as (
    select 
        user_id, 
        max(visited_at) as visited_at
    from user_visits
    where posts_read > 0
    group by user_id
)
select 
  COUNT(1) as active_readers_since,
  CURRENT_TIMESTAMP - i.start_time as time_ago
FROM users u
left join latest_visits v
on u.id = v.user_id
right join intervals i
on v.visited_at >= i.start_time and v.visited_at < i.end_time
group by i.start_time, i.end_time
order by i.start_time desc

```
