2016-09-13 18 views
0

私は増加するユーザー数に従うことができるダイアグラムを作ろうとしています。日付ごとのPostgresqlカウント行合計

は、したがって、私は、特定の期間中に新しく追加されたユーザーの検索SQL文を書きました:次の結果が示されている

select distinct Createtime, count (user_id) as new_users 
from user 
where createtime between '2015-12-03 00:00:00' and CURRENT_DATE 
group by createtime 
order by createtime asc; 

createtime|new_users 
--------------------- 
2015-12-04| 1 
2016-01-20| 1  
2016-02-03| 5 
2016-02-04| 1 

私が持っている結果を追加したいと思います各日付の現在のユーザー数です。結果は次のようになります。

createtime|new_users 
--------------------- 
2015-12-04| 1 
2016-01-20| 2  
2016-02-03| 7 
2016-02-04| 8 

これを実現するSQL文または別の方法がありますか?あなたが私にこれを手伝ってくれることを願っています

+0

あなたはCREATETIME欄の日付またはタイムスタンプを保存しますか? – jarlh

+0

私はタイムゾーンなしでタイムゾーンを使用します – user3906778

答えて

1

あなたは窓関数でそれを行うことができます。

select createtime, sum(new_users) over (order by createtime) as new_users 
from (
    select createtime::date as createtime, count(user_id) as new_users 
    from "user" 
    where createtime between '2015-12-03 00:00:00' and CURRENT_DATE 
    group by createtime 
) t 
order by createtime asc; 

user予約済みのキーワードである、そうでなければ、あなたが識別子として使用することはできません、引用符で囲む必要があります。

+0

重複タイムスタンプを削除するにはどうすればよいですか?しかし、同じ日からの日付は、1日のうちに違ってくる – user3906778

+0

決して気にしないで、私はサテメント(日付としてのキャストクリエートタイム)と別称のキャストで解決しました。 – user3906778

+0

@ user3906778:元のクエリでもそれを行います。 –

0

はこれを試してみてください。

select x.Createtime, 
(select count (sub.user_id) from USER sub 
WHERE sub.createtime between '2015-12-03 00:00:00' and x.Createtime)as new_users 
from user x 
where createtime between '2015-12-03 00:00:00' and CURRENT_DATE 
group by createtime 
order by createtime asc; 
関連する問題