Atul Stha
Atul Stha

Reputation: 1524

Sql query to fetch the number of visitors per day since the last 7 days only

I have a database table visitors with three columns:

id | Name | checkin_date               |
1  | Reg  | 2018-04-20T08:28:54.446Z   |
2  | Meg  | 2018-04-21T08:28:54.446Z   |
3  | Ted  | 2018-04-21T08:28:54.446Z   |
4  | Bin  | 2018-04-23T08:28:54.446Z   |

There are several records such as these. I want to fetch the count of records per each day for only the past 7 days. Right now i was able to fetch the count of visitors per day for all the dates using :

select count(id) as no_of_users
     , DATE_FORMAT(checkin_date, '%d %b, %Y') as date  
  from visitors  
 GROUP 
    BY DATE(checkin_date)

But this displays the count of users per each day of all the records. How to get the records of only past 7 days.

Upvotes: 0

Views: 1620

Answers (3)

Bodhi
Bodhi

Reputation: 548

    select id, count(id) as TOTAL, min (checkin_date) as no_of_users
    from visitors  
where checkin_date between '<Start Date>' and '<End Date>'
 GROUP 
    BY  Id,checkin_date

Upvotes: 1

D-Shih
D-Shih

Reputation: 46219

From your question.

You need to create a calendar table, then LEFT JOIN on the calendar table.

SELECT DATE(t.dt),count(t1.id) cnt
FROM 
(
  SELECT NOW() dt
  UNION ALL 
  SELECT NOW() - INTERVAL 1 DAY
  UNION ALL 
  SELECT NOW() - INTERVAL 2 DAY
  UNION ALL 
  SELECT NOW() - INTERVAL 3 DAY
  UNION ALL 
  SELECT NOW() - INTERVAL 4 DAY
  UNION ALL 
  SELECT NOW() - INTERVAL 5 DAY
  UNION ALL 
  SELECT NOW() - INTERVAL 6 DAY
  UNION ALL 
  SELECT NOW() - INTERVAL 7 DAY
) t LEFT JOIN T t1 
ON DATE(t.dt) = DATE(t1.checkin_date)
group by t1.name,DATE(t.dt)

sqlfiddle:http://sqlfiddle.com/#!9/59f49b/5

Upvotes: 2

t..
t..

Reputation: 1101

select count(id) as no_of_users, DATE_FORMAT(checkin_date, '%d %b, %Y') as date  from visitors  
where checkin_date >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY DATE(checkin_date)

in the where is where you want to do the date field >= last 7 days

Upvotes: 2

Related Questions