2013-10-01 27 views
4

我想建立註冊用戶(每天)的圖表SQL準備數據顯示圖表

我將使用谷歌的圖表,所以我應該有數據要使用

我寫了一個SQL查詢其數註冊用戶一天

SELECT DATE(created_at), COUNT(DISTINCT id) amount 
FROM users 
GROUP BY DATE(created_at) 

這將返回我的數據散列和用戶數

{"date"=>"2013-09-24", "amount"=>"100"} 
{"date"=>"2013-09-26", "amount"=>"1"} 
{"date"=>"2013-10-01", "amount"=>"2"} 

問題:

我想在沒有任何新用戶,像

{"date"=>"2013-09-25", "amount"=>"0"} 

(我使用的是PG數據庫爲天顯示0註冊,我也用這個查詢的Rails應用程序,所以你可以給我使用ActiveRecord)


      **UPDATE** 

我的Rails應用程序的建議,我以這樣的方式

想通了這個問題10
#controller 
    def charts 
    users = User.select([:id, :created_at]) 
    @data = users.where("created_at >= ?", Date.today - 1.month) 
    @inf = [] 
    @date = [] 
    month = Date.today - 1.month 
    month.upto(Date.today).each do |date| 
     @date << date.strftime('%d/%m') 
     @inf << @data.select{|u| u.created_at.to_date == date }.size 
    end 
    end 

@inf@date數組我有註冊用戶和日期的數量。

回答

0

您將需要您想要考慮的所有日期的來源。

例如,從第一項到現在

WITH cte_days 
AS 
( 
    SELECT MIN(DATE(created_at)) AS [Day] FROM USERS -- First registered User 
    UNION ALL 
    SELECT DATEADD(dd, 1, [Day]) 
    FROM cte_days 
    WHERE DATEADD(dd, 1, [Day]) < GETDATE() -- Stop at today 
) 
SELECT [Day], COUNT(DISTINCT id) amount 
FROM cte_days LEFT JOIN users ON [Day] = DATE(created_at) 
GROUP BY [Day] 
0

我不知道你正在使用的數據庫,但由於沒有人回答了這個然而,這是我怎麼會去它在MSSQL

DECLARE @MinDate DATETIME 
    DECLARE @MaxDate DATETIME 
    SET @MinDate = '01 Jan 2013' 
    SET @MaxDate = '31 Jul 2013' 

    ;with d(date) as (
    select @MinDate 
    union all 
    select date+1 
    from d 
    where date < @MaxDate 
) 
    select d.date created_at, COUNT(DISTINCT u.id) amount 
    from d 
    left join users u 
     on u.created_at = d.date 
    GROUP BY d.date 
    OPTION (MAXRECURSION 0) 

您只需要OPTION (MAXRECURSION 0)日期範圍> 100天