dense_rank()
などを使用して月ごとに別のものを数える方法についてはかなりの量がありますが、私はもまた別のものを見つけることができませんでした先月のグループで見られた。レッド・シフトで月に一度「真新しい、見たことのない」IDを数えることができますか?
データがそうのように想像することができます。
id (int8 type) | observed time (timestamp utc)
------------------
1 | 2017-01-01
2 | 2017-01-02
1 | 2017-01-02
1 | 2017-02-02
2 | 2017-02-03
3 | 2017-02-04
1 | 2017-03-01
3 | 2017-03-01
4 | 2017-03-01
5 | 2017-03-02
数のプロセスのように見ることができます。
1:2017から01に、我々は、デバイス1と2を見たので、カウントは2であります
2:2017から03に、我々は、デバイスを見た:2017から02に、私たちは私たちは、デバイス1と2について既に知っているではなく、3、その数は1
3であるデバイス1、2と3を見ました1、3、4および5約1〜3ではなく4または5知っているので、カウントは、所望の出力のようなものであることを2
です:明示的に、私は、新しいテーブルを持って探しています
observed time | count of new id
--------------------------
2017-01 | 2
2017-02 | 1
2017-03 | 2
1か月あたり集計された月と、その月に発生した新しいIDの数が、以前はまったく見られなかった回数で計算されます。
IRLの場合、デバイスは1か月に複数回表示されますが、カウントには影響しません。また、idの格納に正の整数と負の整数を使用し、真のタイムスタンプでは2番目の時間になります。データセットのサイズも重要です。
私の最初の試みは、のラインに沿っている:
WITH records_months AS (
SELECT *,
date_trunc('month', observed_time) AS month_group
FROM my_table
WHERE observed_time > '2017-01-01')
id_months AS (
SELECT DISTINCT
month_group,
id
FROM records_months
GROUP BY month_group, id)
SELECT *
FROM id-months
しかし、私は前にヶ月で見られなかった新しいIDの数をカウントすなわち次の部分にこだわっています。私はこのソリューションが窓関数かもしれないと信じていますが、どのように、どのようにして解決するのか困っています。
ありがとうございます。私はこれが正しいと信じています。私の現在のIRLデータセットに対する私の要求にも十分に速いです。 – DaveRGP